_start符号可能在哪里定义

时间:2016-11-04 16:17:54

标签: gcc assembly linker riscv

我有一些RISCV的启动程序集,它将.text部分定义为从.globl _start开始。

我知道这是什么 - 因为反汇编显示了我的地址,但我无法看到它的定义。它不在链接器脚本中,构建目录中的grep显示它在各种二进制文件中,但我找不到定义。

我猜这个出现在某个文件中作为架构的函数,但任何人都可以告诉我在哪里? (这都是使用Linux上的RISCV GNU交叉编译器构建的)

2 个答案:

答案 0 :(得分:1)

除非你自己控制它,否则通常至少在gnu工具世界中有一个名为crt0.s.的文件。或许还有其他一些名字。应该是每个架构一个,因为它是汇编语言。它是默认的引导程序,零.bss根据需要复制.data等。

我不记得它是否是C库(glibc,newlib等)的一部分,或者是否稍后由构建针对特定平台的工具链的人员添加。

当然不是必需的,但是看到_start是二进制开头的标签并不常见,它应该是肯定的入口点。因此,如果你有一个操作系统/加载器使用带有标签的二进制文件(elf等),那么它可以加载二进制文件,而不是分支到它分支到入口点的第一个地址。

答案 1 :(得分:0)

因此_start仅定义为.text部分的开头,.text部分的地址在链接描述文件中定义。

相关问题