C 原始二进制入口点
我在为我的嗜好操作系统内核指定入口点时遇到问题 有一个简单的引导加载程序,它将内核代码加载到C 原始二进制入口点,c,linker,ld,osdev,lld,C,Linker,Ld,Osdev,Lld,我在为我的嗜好操作系统内核指定入口点时遇到问题 有一个简单的引导加载程序,它将内核代码加载到0x6400000地址并跳到那里 然后我有一个linker命令,它输出内核和起始地址: ld --Ttext 0x6400000 -m elf_i386 --oformat binary -e kmain main.o -o main.bin 有带有入口点功能的main.cc: void kmain() { // ... } 只要kmain()是第一个定义的函数,一切都可以正常工作。 如果不是: vo
0x6400000
地址并跳到那里
然后我有一个linker命令,它输出内核和起始地址:
ld --Ttext 0x6400000 -m elf_i386 --oformat binary -e kmain main.o -o main.bin
有带有入口点功能的main.cc
:
void kmain() { // ... }
只要kmain()
是第一个定义的函数,一切都可以正常工作。
如果不是:
void do_smth() { // ... }
void kmain()
{
do_smth();
}
然后ld
(和lld
)忽略-e kmain
参数,并将do\u smth()
作为入口点
如何强制
ld
创建kmain()
一个地址为0x6400000
的入口点?ELF入口点的可能副本将正确设置为符号kmain。但是您指定了二进制作为输出格式!因此,不再有ELF头将kmain指定为条目。你真正想要的可能是在二进制文件的最开始有kmain,对吗?当链接到二进制格式时,入口点参数是否完全未使用?@Pyjong是的,据我观察,它未使用。