我正在研究 32 位保护模式内核。我正在尝试生成文本区域从 0x100000 开始的代码。我发出以下命令:=
ld -melf_i386 $(OBJS)-o 内核 -Ttext 0x100000
我希望当我检查生成的 32 位 ELF 文件时,e_entry 位于 0x100000。然而,事实并非如此,这是我的问题,因为我不知道为什么。内核有一部分是用 nasm 编写的,并且正在以 32 位 ELF 为目标的 64 位 linux 上编译。上述 ld 命令生成的实际 e_entry 值为 0x116D5A。我想知道这是否与我需要的某些编译器选项有关,例如 -fpic 或与 nasm 生成的代码不兼容,或者 ld 中可能存在错误?有人可以帮忙吗。谢谢
应该注意的是,给上面的 ld 提供 -r 选项,如下所示:= ld -r -melf_i386 $(OBJS)-o kernel -Ttext 0x100000
生成 e_entry 为 0x100000 的输出,但是该文件不是可执行文件。我需要它是一个可执行文件。