【发布时间】:2016-11-04 16:17:54
【问题描述】:
我有一些 RISCV 启动程序集,它将 .text 部分定义为从 .globl _start 开始。
我知道这是什么 - 反汇编显示地址,但我看不到它的定义位置。它不在链接器脚本中,构建目录中的 grep 显示它在各种二进制文件中,但我找不到定义。
我猜这作为架构的函数出现在某个文件中,但是谁能告诉我在哪里? (这都是在 Linux 上使用 RISCV GNU 交叉编译器构建的)
【问题讨论】:
-
这个问题的答案涉及到链接器、加载器和启动代码的内部细节。或者换一种说法,
_start的地址会在运行时分配,所以grep没有定义可以找到。 -
对于我的裸机项目,我将
_start映射到链接描述文件中的固定地址。否则我不能保证_start是在正确的地方。 -
在与
.globl _start指令相同的源代码文件中应该有一个_start:行定义标签_start,否则.globl _start指令没有任何用处。 -
有这么一行,但它只是落在 .text 部分的开头,但也许这就是重点!