非常简单的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最新版
答案 0 :(得分:1)
printf
是C函数,它不是stdcall
,而是cdecl
。因此,调用者(您)需要在调用后释放参数。使用add esp, 4
。