【发布时间】:2012-07-22 00:44:36
【问题描述】:
我正在用 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。)
这似乎工作得很好——ld 生成一个 128 字节的文件,在前 11 个字节中包含以下指令:
但是,我无法弄清楚其他 117 个字节的用途。拆卸它们似乎会产生一堆没有任何意义的垃圾。额外字节的存在让我想知道我是否做错了什么。
我应该担心吗?
【问题讨论】:
-
哦,是的,我确实意识到生成的代码需要在保护模式下运行。引导加载程序将负责将 CPU 切换到保护模式。
-
@Aftnix:我正在生成一个平面二进制文件。应该没有 ELF 标头。
-
之后怎么样:strip --strip-all -R .note -R .comment kernel.bin
-
也许这是调试信息?尝试类似: ld kernel.o -o --strip-all kernel.bin -T linker.ld --oformat=binary
标签: c gcc operating-system kernel