Что это за дополнительные байты в моем двоичном файле?

Я нахожусь в процессе написания небольшой операционной системы на C. Я написал загрузчик и теперь пытаюсь получить простой файл C («ядро» )для компиляцииgcc:

int main(void) { return 0; }

Я компилирую файл с помощью следующей команды:

gcc kernel.c -o kernel.o -nostdlib -nostartfiles

Я использую компоновщик для создания окончательного образа с помощью этой команды:

ld kernel.o -o kernel.bin -T linker.ld --oformat=binary

Содержимое файла linker.ldвыглядит следующим образом:

SECTIONS
{
   . = 0x7e00;

   .text ALIGN (0x00) :
    {
        *(.text)
    }
}

(Загрузчик загружает образ по адресу 0x7e00.)

Кажется, это работает достаточно хорошо-ldсоздает файл размером 128 -байт, содержащий следующие инструкции в первых 11 байтах:

00000000 55                             push    ebp
00000001 48                             dec eax
00000002 89 E5                          mov ebp, esp
00000004 B8 00 00 00 00                 mov eax, 0x00000000
00000009 5D                             pop ebp
0000000A C3                             ret

Однако я не могу понять, для чего нужны остальные 117 байт. Разборка их, кажется, производит кучу мусора, который не имеет никакого смысла. Существование дополнительных байтов заставляет меня задуматься, не делаю ли я что-то не так.

Должен ли я беспокоиться?

hexdump of the file

7
задан Mooing Duck 23 July 2012 в 18:42
поделиться