main的堆栈帧是否有保存的帧指针和保存的返回地址?

时间:2016-03-20 19:25:23

标签: c++ c callstack

在C \ C ++程序的主函数的堆栈框架中,是否有保存的返回地址和保存的堆栈指针(ebp)?如果是这样,他们指向哪里,因为没有先前的堆栈帧要记录?

1 个答案:

答案 0 :(得分:2)

由gcc,MSVC和其他编译器创建的C \ C ++二进制文件也有一个入口点_start,它是库的一部分,并静态链接到可执行文件中。操作系统的ELF / PE加载程序为程序运行设置堆栈,并且在调度时,CPU 返回到_start,然后执行某些特定于库的设置并调用{{1} }}。因此,在调用main时,会有一个存储的返回地址返回到clib函数,然后使用系统调用通知操作系统终止程序。

然而,正如评论所指出的那样,这不是由语言标准本身定义的,而是在现有系统中最常用的方式。

相关问题