我一直在阅读ELF规范,无法确定程序入口点和_start地址从何而来。
似乎它们应该在一个相当一致的位置,但是我编写了一些琐碎的程序,而_start始终在另一个位置。
谁能澄清?
该_start符号可以在任何目标文件中定义。通常它是自动生成的(对应于mainC中)。您可以自己生成它,例如在汇编源文件中:
.globl _start
_start:
// assembly here
Run Code Online (Sandbox Code Playgroud)
当链接器处理完所有目标文件后,它会查找_start符号并将其值放入elf 标头e_entry的字段中。加载器从该字段获取地址,并在完成加载内存中的所有部分并准备好执行文件后调用它。
| 归档时间: |
|
| 查看次数: |
2380 次 |
| 最近记录: |