__gmon_start在_start之前执行

__gmon_start is executed before _start

当我用 gdb 分析 /usr/bin/diff 时,我发现由于某种原因 __gmon_start___start 之前被调用。到目前为止,我找到的每份文档都声称 _start 是程序的入口点;而ELF头中的entry point字段也指向_start.

的地址

为什么diff不开始执行_start;这些信息保存在哪里?

Every document I have found so far has been claiming that _start is the entry point of a program

对于完全静态的可执行文件,这是正确的。

对于动态链接的可执行文件,user-space 执行从加载程序的 _start 符号开始(ld.so),通常有 10 几千条指令和在 a.out.

中加载程序调用 _start 之前执行的许多系统调用

a.out 中到达 _start 的过程中,可以调用主可执行文件中的函数(这就是您所观察到的)。