在C \ C ++程序的主函数的堆栈框架中,是否有保存的返回地址和保存的堆栈指针(ebp)?如果是这样,他们指向哪里,因为没有先前的堆栈帧要记录?
答案 0 :(得分:2)
由gcc,MSVC和其他编译器创建的C \ C ++二进制文件也有一个入口点_start
,它是库的一部分,并静态链接到可执行文件中。操作系统的ELF / PE加载程序为程序运行设置堆栈,并且在调度时,CPU 将返回到_start
,然后执行某些特定于库的设置并调用{{1} }}。因此,在调用main
时,会有一个存储的返回地址返回到clib函数,然后使用系统调用通知操作系统终止程序。
然而,正如评论所指出的那样,这不是由语言标准本身定义的,而是在现有系统中最常用的方式。