我正在用NASM编写一个程序,我不想将它与CRT链接,因此我将指定入口点(将是Win32入口点)。
global _myEntryPoint
section .text
_myEntryPoint:
mov eax, 12345
现在这是我所知道的Win32入口点(如果我错了,请纠正我):
- Win32入口点不像普通函数那样返回值(要退出Win32入口点,我必须调用
ExitProcess()
)。 - Win32入口点不接受任何参数。
现在我不知道的是:
- Win32入口点是否必须保留任何寄存器值(被调用方保存的寄存器)?我认为答案是 No,因为当Win32入口点退出时,它会终止进程,并且不会将执行返回到期望保留某些寄存器值的函数。
1条答案
按热度按时间13z8s7eq1#
如my answer to the proposed duplicate中所述,您根本不应该从Win32入口点返回,在这种情况下,您显然不需要保留任何寄存器。您的问题的措辞模糊地暗示您担心在调用
ExitProcess
之前可能需要恢复寄存器,但事实并非如此;调用ExitProcess
不会导致从入口点it just stops running your code返回。(另请参见here以获取更新,以及this may also be of interest。)如果您忽略了这个建议并从入口点返回,那么,实际上答案是相同的:你实际上不需要保留任何寄存器。但是,据我所知,这种行为没有文档记录,所以如果你想谨慎,你可以选择严格遵守
stdcall
约定。