装配程序不会退出

时间:2017-09-24 13:48:49

标签: assembly

我正在尝试在程序集中创建我的第一个可执行文件,我遇到了一个问题,即应用程序永远不会退出(我必须手动终止它)。 代码:

[bits 32]
extern _puts

section .data

testString:
db "Test"

section .text

_WinMain@16:
push testString
call _puts
add esp,4
xor eax,eax
ret

我使用NASM 2.13.01和ld.exe 2.28(在Windows 10上)编译它

nasm -f Win32 -p first_exe.obj first_exe.asm
ld first_exe.obj -o first_exe.exe c:\Windows\System32\msvcrt.dll

我的朋友告诉我它可以在他的电脑上使用相同的NASM版本,但是ld 2.24(Windows 8)

ld,Windows 10或我的代码是否有问题?除了调用exit函数之外,还有其他解决方法吗?

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

WinMain返回并不会终止您的申请。 documentation很明显,你需要自己做。还有另一个错误:C字符串必须以NUL字节终止,因此testString应该像这样定义:

testString:
    db "Test",0