当控制权返回操作系统时,操作系统是否会假设有关被调用者保存的寄存器的任何信息?
我想知道操作系统(例如 Windows)是否假设有关被调用者保存的寄存器的任何信息,例如ebp, esi, edi
?
换句话说,当控制权转移回操作系统时,操作系统是否需要保留这些寄存器中的值(ret
in main
)?
我找不到任何指定的内容,但我想答案是否定的(查看了编译器生成的代码)。有关于该主题的任何文档吗?
Windows 32 is designed to have process isolation.
Nothing* that a process does can cause another process (including) the operating system itself to fail.
For this reason it does not matter what you do with the registers upon exit.
唯一的例外是esp
。如果堆栈指针混乱,您的应用程序将因堆栈错误或访问冲突而终止。
这仍然不会影响操作系统,但是,它只会稍微提前终止您的应用程序。
*Obviously this does not include the effects on the system by legitimate system calls, or the exploitation of bugs.
请注意,ret
in main
does not将控制权返回给操作系统。几乎都是Win32c
应用程序包含一个运行时库。如果是这样的话ret
in main
返回一些如下所示的初始化代码:
//pseudo-init
do set up (setup command line params for main to read).
call main;
call Windows.ExitProcess();
“干净”地退出 Windows 对于应用程序来说非常重要,这样它就可以清理自己的资源(关闭文件等)。操作系统并不真正关心。如果应用程序没有自行清理,操作系统将替它完成这项工作。
比崩溃更糟糕的是“挂起”。如果应用程序陷入无限循环,或者更糟糕的是,陷入不断占用越来越多资源的无限循环,那么系统很容易就会崩溃。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)