当我使用/usr/bin/diff分析gdb时,我发现由于某种原因,__gmon_start__在_start之前被调用。到目前为止,我找到的每个文档都声称_start是程序的入口点;ELF头中的入口点字段也指向_start的地址。
为什么diff不开始使用_start执行;以及这些信息保存在哪里?
发布于 2016-02-14 20:20:50
到目前为止,我找到的每一份文档都声称_start是程序的入口点。
对于完全静态的可执行文件,这是正确的.
对于动态链接的可执行文件,用户空间执行从加载程序的_start符号(ld.so)开始,通常在加载程序调用a.out中的_start之前执行10s的数千条指令和许多系统调用。
在以_start实现a.out的过程中,可以调用主可执行文件中的函数(这就是您所观察到的)。
https://stackoverflow.com/questions/35264707
复制相似问题