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

标签 c++ c callstack

C\C++程序主函数的栈帧中,是否有保存的返回地址和保存的栈指针(ebp)?如果是这样,由于没有先前的堆栈帧可记录,它们指向哪里?

最佳答案

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

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

关于c++ - main 的堆栈帧是否有保存的帧指针和保存的返回地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36118404/

相关文章:

c - C 中的字符串 - print 是相同的 strcmp 说它们不是

c - 在 Struct 中索引指向 char 指针的指针会覆盖所有值吗?

c - 静态结构变量段错误

c - 如何防止 gcc 重新排序 x86 帧指针保存/设置指令?

delphi - 如何在没有有用的调用堆栈的情况下调试难以重现的崩溃?

c++ - VC解决方案跨多个项目访问同一个对象

c++ - 编译器错误 ‘NonCopyable::NonCopyable(const NonCopyable&)’ 是私有(private)的

c++ - 导致段错误的简单字符串分配?

c++ - 所有变量是否都根据它们在程序中声明的顺序连续存储?

c++ - Netbeans C++ 项目上的 SFML 错误