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

frebpwbc  于 2023-03-18  发布在  其他
关注(0)|答案(1)|浏览(176)

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

global _myEntryPoint

section .text
_myEntryPoint:
    mov eax, 12345

现在这是我所知道的Win32入口点(如果我错了,请纠正我):

  • Win32入口点不像普通函数那样返回值(要退出Win32入口点,我必须调用ExitProcess())。
  • Win32入口点不接受任何参数。

现在我不知道的是:

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

13z8s7eq1#

my answer to the proposed duplicate中所述,您根本不应该从Win32入口点返回,在这种情况下,您显然不需要保留任何寄存器。您的问题的措辞模糊地暗示您担心在调用ExitProcess之前可能需要恢复寄存器,但事实并非如此;调用ExitProcess不会导致从入口点it just stops running your code返回。(另请参见here以获取更新,以及this may also be of interest。)
如果您忽略了这个建议并从入口点返回,那么,实际上答案是相同的:你实际上不需要保留任何寄存器。但是,据我所知,这种行为没有文档记录,所以如果你想谨慎,你可以选择严格遵守stdcall约定。

相关问题