Windows中的NASM,Hello World示例比较



这两个示例,做同样的事情,它们只是打印一个 "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/

最新更新