我有一些RISCV的启动程序集,它将.text
部分定义为从.globl _start
开始。
我知道这是什么 - 因为反汇编显示了我的地址,但我无法看到它的定义。它不在链接器脚本中,构建目录中的grep显示它在各种二进制文件中,但我找不到定义。
我猜这个出现在某个文件中作为架构的函数,但任何人都可以告诉我在哪里? (这都是使用Linux上的RISCV GNU交叉编译器构建的)
答案 0 :(得分:1)
除非你自己控制它,否则通常至少在gnu工具世界中有一个名为crt0.s.的文件。或许还有其他一些名字。应该是每个架构一个,因为它是汇编语言。它是默认的引导程序,零.bss根据需要复制.data等。
我不记得它是否是C库(glibc,newlib等)的一部分,或者是否稍后由构建针对特定平台的工具链的人员添加。
当然不是必需的,但是看到_start是二进制开头的标签并不常见,它应该是肯定的入口点。因此,如果你有一个操作系统/加载器使用带有标签的二进制文件(elf等),那么它可以加载二进制文件,而不是分支到它分支到入口点的第一个地址。
答案 1 :(得分:0)
因此_start
仅定义为.text
部分的开头,.text
部分的地址在链接描述文件中定义。