Win32入口点是否必须保留任何寄存器值(被调用者保存的寄存器)?

use*_*277 4 x86 assembly winapi nasm

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

global _myEntryPoint

section .text
_myEntryPoint:
    mov eax, 12345
Run Code Online (Sandbox Code Playgroud)

现在这就是我对Win32入口点的了解(如果我错了请纠正我):

  • Win32入口点不返回像普通函数那样的值(退出我必须调用的Win32入口点 ExitProcess()).
  • Win32入口点不带任何参数.

现在我不知道的是以下内容:

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

Har*_*ton 6

正如我对建议的副本的回答中所描述的那样,你根本不应该从Win32入口点返回,在这种情况下,显然你不需要保留任何寄存器.你的问题含糊不清的方式表明你担心你的夜晚需要在打电话前恢复登记,ExitProcess但绝对不是这样; 调用ExitProcess不会导致您从入口点返回,它只是停止运行您的代码.(另请参阅此处了解更新,这也可能是您感兴趣的.)

您是否应该忽略该建议并从入口点返回,实际上答案是相同的:您实际上并不需要保留任何寄存器.据我所知,这种行为没有记录,所以如果你想要谨慎,你可以选择严格遵守stdcall惯例.