Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 原始二进制入口点_C_Linker_Ld_Osdev_Lld - Fatal编程技术网

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是的,据我观察,它未使用。