1
0
mirror of https://github.com/0xAX/linux-insides.git synced 2025-07-06 01:02:31 +00:00

Описание для проверки выравнивания загружаемых сегментов

This commit is contained in:
proninyaroslav 2018-08-05 12:53:41 +03:00
parent bbaea8c705
commit 19e34d07c9

View File

@ -328,7 +328,7 @@ if (ehdr.e_ident[EI_MAG0] != ELFMAG0 ||
}
```
и если файл некорректный, функция выводит сообщение об ошибке и останавливается. Если же `ELF` файл корректный, мы просматриваем все заголовки из указанного `ELF` файла и копируем все загружаемые сегменты с правильным адресом в выходной буфер:
и если файл некорректный, функция выводит сообщение об ошибке и останавливается. Если же `ELF` файл корректный, мы просматриваем все заголовки из указанного `ELF` файла и копируем все загружаемые сегменты с правильным адресом, выровненным по 2 мегабайтам, в выходной буфер:
```C
@ -337,6 +337,10 @@ if (ehdr.e_ident[EI_MAG0] != ELFMAG0 ||
switch (phdr->p_type) {
case PT_LOAD:
#ifdef CONFIG_X86_64
if ((phdr->p_align % 0x200000) != 0)
error("Alignment of LOAD segment isn't multiple of 2MB");
#endif
#ifdef CONFIG_RELOCATABLE
dest = output;
dest += (phdr->p_paddr - LOAD_PHYSICAL_ADDR);