【发布时间】:2018-03-01 18:03:26
【问题描述】:
如果我使用的是 Win32 入口点并且我有以下代码(在 NASM 中):
extern _ExitProcess@4
global _start
section .text
_start:
mov ebp, esp
; Reserve space onto the stack for two 4 bytes variables
sub esp, 4
sub esp, 4
; ExitProcess(0)
push 0
call _ExitProcess@4
现在在退出进程之前,我是否应该像使用任何“正常”函数一样增加 esp 值以从堆栈中删除两个变量?
【问题讨论】:
-
这不是和你上一个问题基本一样
-
如我所见,如果你理解了最后一个问题的答案,那么你可以在这里应用这些知识,不是吗?
-
写两次
sub esp, 4总是比sub esp, 8差。在汇编语言中,没有编译器可以为您优化冗余。 -
您正在调用
_Noreturn函数,没有返回。因此,与任何其他函数调用一样,不,您无需在进行另一次调用之前执行任何操作。 -
Johan 的回答是为了回答有关从应用程序的 main() 函数返回的问题,或者至少 Johan 是这样解释的。与您的情况完全不同,您使用的是 Win32 入口点并且无论如何都不会从它返回。