printf后,nasm应用程序崩溃

时间:2014-08-10 13:11:16

标签: assembly crash printf nasm

非常简单的Hello world世界。我成功地将其与nasm.exe main.asm -f win32 -o main.obj汇总并将其与gcc.exe -fno-use-linker-plugin -o main.obj output.exe联系起来 它运行正常,它在屏幕上打印,然后程序崩溃(output.exe has stopped working)。看来我在堆栈上做了一些东西,但我找不到错误。如果我在堆栈上传递参数(stdcall),这样可以吗?它应该,因为它打印好,但是..

这是代码

section .data
    msg db "Hello, world!", 0

section .text
    global _main
    extern _printf
_main:

    push msg
    call _printf

    xor eax, eax
    ret

平台:win8.1 x64,Intel CPU,NASM 2.11,GCC最新版

1 个答案:

答案 0 :(得分:1)

printf是C函数,它不是stdcall,而是cdecl。因此,调用者(您)需要在调用后释放参数。使用add esp, 4