我试图了解Linux如何启动程序。我在某处读到glibc中的某些函数调用main函数。使用callgrind进行分析并查看Kcachegrind中的调用图,我看到below main
调用main。但是我不明白这个,一个函数不能这样命名。所以我的问题是glibc中的哪个函数实际上启动了主函数。
答案 0 :(得分:11)
按照valgrind自己的帮助,你会找到选项 - show-below-main 的解释:
默认情况下,错误的堆栈跟踪不显示任何功能 出现在主要之下,因为大部分时间它都是无趣的 图书馆的东西和/或gobbledygook。或者,如果不是主要的话 在堆栈跟踪中,堆栈跟踪不会显示任何功能 下面的主要功能,如glibc的__libc_start_main。 此外,如果跟踪中存在类似主函数,则它们是 归一化为(低于主要),以使输出更多 确定性的。
因此,主要下面的不是调用main本身的函数,而是 __ libc_start_main 。