main 的堆栈帧是否有保存的帧指针和保存的 return 地址?
Does the stack frame for main have a saved frame pointer and a saved return address?
在C\C++程序的main函数的栈帧中,是否有保存的return地址和保存的栈指针(ebp)?如果是这样,他们指向哪里,因为没有以前的堆栈帧要记录?
C\C++ 由 gcc、MSVC 和可能其他编译器创建的二进制文件也有一个入口点 _start
,它是库的一部分并静态链接到可执行文件中。操作系统的 ELF/PE 加载程序为程序设置一个堆栈到 运行 并且在调度时, CPU returns到 _start
,然后执行一些特定于库的设置并调用 main
。因此在调用 main
时,有一个存储的 return 地址返回到 clib 函数,然后使用系统调用通知 OS 终止程序。
然而,正如评论所指出的,这不是由语言标准本身定义的,只是它在现有系统中最常见的实现方式。
在C\C++程序的main函数的栈帧中,是否有保存的return地址和保存的栈指针(ebp)?如果是这样,他们指向哪里,因为没有以前的堆栈帧要记录?
C\C++ 由 gcc、MSVC 和可能其他编译器创建的二进制文件也有一个入口点 _start
,它是库的一部分并静态链接到可执行文件中。操作系统的 ELF/PE 加载程序为程序设置一个堆栈到 运行 并且在调度时, CPU returns到 _start
,然后执行一些特定于库的设置并调用 main
。因此在调用 main
时,有一个存储的 return 地址返回到 clib 函数,然后使用系统调用通知 OS 终止程序。
然而,正如评论所指出的,这不是由语言标准本身定义的,只是它在现有系统中最常见的实现方式。