Я нахожусь в процессе написания небольшой операционной системы на 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 байт. Разборка их, кажется, производит кучу мусора, который не имеет никакого смысла. Существование дополнительных байтов заставляет меня задуматься, не делаю ли я что-то не так.
Должен ли я беспокоиться?