我正在用 NASM 编写程序,我不想将它与 CRT 链接,因此我将指定入口点(将是 Win32 入口点)。这是程序源代码:

global _myEntryPoint

section .text
_myEntryPoint:
    mov eax, 12345

现在这就是我对 Win32 入口点的了解(如果我错了,请纠正我):
  • Win32 入口点没有像正常一样返回值
    函数执行(要退出 Win32 入口点,我必须调用ExitProcess() )。
  • Win32 入口点不接受任何参数。

  • 现在我不知道的是以下内容:
  • Win32 入口点是否必须保留任何寄存器值(被调用者保存的寄存器)?我认为答案是否定的,因为当 Win32 入口点退出时,它会终止进程并且不会将执行返回到期望保留某些寄存器值的函数。
  • 最佳答案

    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/

    10-11 15:32