我在《Programming from ground up》一书中了解了汇编(x86)如何在全球范围内工作。
在本书中,每个程序都以退出中断调用结束。
然而,在C编译的程序中,我发现程序以ret结尾。这假设有一个地址要弹出,这将导致程序结束。
所以我的问题是:
这个地址是什么? (那里的代码是什么?)
你通过询问来开始你的程序OS将控制权传递给start or _start通过跳转到代码中的该标签来执行程序的功能。在 C 程序中start函数来自 C 库,并且(正如其他人之前已经说过的)执行一些特定于平台的环境初始化。然后启动函数调用你的main控制权是你的。当你从main,它将控制权传递回 C 库,该库正确终止程序并执行特定于平台的操作系统调用将控制权返回给OS.
所以地址 main pops 是来自 C 库的标签。如果你想检查它,它应该在stdlib.h(cstdlib) 你会看到它调用exit进行清理工作。
它的功能是在程序终止或线程终止(C++11)时销毁静态对象(当然是C++)。在 C 情况下,它只是关闭流、刷新缓冲区、调用 atexit 函数并执行以下操作:系统调用.
我希望这是您寻求的答案。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)