这两个示例,做同样的事情,它们只是打印一个 "Hello, World!"
消息:
示例1:
global _main
extern _printf
section .text
_main:
push message
call _printf
add esp, 4
ret
message:
db "Hello, World!", 13, 10, 0
这是命令行:
nasm -fwin32 0.asm
gcc 0.obj
示例2:
global _main
extern _ExitProcess@4, _printf
section .text
_main:
push message
call _printf
add esp, 4
push 0
call _ExitProcess@4
message:
db "Hello, World!", 13, 10, 0
这是命令行:
nasm -fwin32 0.asm
gcc 0.obj
我的问题是,什么时候使用_ExitProcess@4
函数?何时仅使用ret
?
从 main()
返回通常会导致 exit()
又导致 ExitProcess()
;但是,如果您在汇编中写作,通常最终会占用原始入口点,而不是main()
,从中返回 ExitThread()
。
有关原始入口点的更多信息:https://blogs.msdn.microsoft.com/oldnewthing/20110525-00/?p=10573/