我正在用 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
文件的内容如下:
部分 { . = 0x7e00; .文本对齐(0x00): { *(。文本) } }
(引导加载程序在地址加载映像0x7e00
。)
这似乎工作得很好——ld
生成一个 128 字节的文件,在前 11 个字节中包含以下指令:
00000000 55 推送 ebp 00000001 48 dec eax 00000002 89 E5 移动 ebp, esp 00000004 B8 00 00 00 00 移动 eax, 0x00000000 00000009 5D pop ebp 0000000A C3 RET
但是,我无法弄清楚其他 117 个字节的用途。拆卸它们似乎会产生一堆没有任何意义的垃圾。额外字节的存在让我想知道我是否做错了什么。
我应该担心吗?