我正在用 NASM 编写程序,我不想将它与 CRT 链接,因此我将指定入口点(将是 Win32 入口点)。这是程序源代码:
global _myEntryPoint
section .text
_myEntryPoint:
mov eax, 12345
现在这就是我对 Win32 入口点的了解(如果我错了,请纠正我):
函数执行(要退出 Win32 入口点,我必须调用
ExitProcess()
)。 现在我不知道的是以下内容:
最佳答案
如 my answer to the proposed duplicate 中所述,您根本不应该从 Win32 入口点返回,在这种情况下,您显然不需要保留任何寄存器。您的问题措辞含糊的方式表明您担心您晚上需要在调用 ExitProcess
之前恢复寄存器,但这绝对不是这种情况;调用 ExitProcess
不会使您从入口点 it just stops running your code 返回。 (另请参阅 here 以获取更新和 this may also be of interest 。)
如果您忽略该建议并无论如何从入口点返回,那么实际上答案是相同的:您实际上不需要保留任何寄存器。然而,据我所知,这种行为没有记录在案,所以如果你想保持谨慎,你可以选择严格遵循 stdcall
约定。
关于winapi - Win32 入口点是否必须保留任何寄存器值(被调用者保存的寄存器)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46294072/