在ELF文件中,如何确定_start的地址?

sam*_*moz 6 symbols elf

我一直在阅读ELF规范,无法确定程序入口点和_start地址从何而来。

似乎它们应该在一个相当一致的位置,但是我编写了一些琐碎的程序,而_start始终在另一个位置。

谁能澄清?

ctn*_*ctn 4

_start符号可以在任何目标文件中定义。通常它是自动生成的(对应于mainC中)。您可以自己生成它,例如在汇编源文件中:

.globl _start
_start:
    // assembly here
Run Code Online (Sandbox Code Playgroud)

当链接器处理完所有目标文件后,它会查找_start符号并将其值放入elf 标头e_entry的字段中。加载器从该字段获取地址,并在完成加载内存中的所有部分并准备好执行文件后调用它。