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

标签 c++ c callstack

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

最佳答案

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

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

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

相关文章:

c++ - 数据类型不完整的容器的迭代器是否合法?

c++ - 由于在 32 位的 G++ 4.4.7 20120313 中使用 C++ std::vector 中的内联函数导致精度发生变化

c - 在理解 C 中的链表代码方面需要帮助

c - 当我从函数中更改它时,为什么 `src` 没有更改?

java - 检索方法或构造函数的调用者实例(不是类)

javascript - 如何在 Javascript 中重新抛出异常,但保留堆栈?

c++ - GDB 控制台无法显示 printf 的结果

c - 我的 Blowfish 算法是 "standard"吗?

sharepoint - 如何在SharePoint 2010中看到异常调用堆栈?

c++ - 在 C++ 中读取、操作和写入 SQLServer DateTimeOffset 字段