【问题标题】:Assembly program does not exit [duplicate]汇编程序不退出[重复]
【发布时间】:2017-09-24 13:48:49
【问题描述】:

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

[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函数外,有什么解决方法吗?

感谢您的帮助

【问题讨论】:

标签: assembly


【解决方案1】:

WinMain 返回不会终止您的应用程序。 documentation 非常清楚您需要自己执行此操作。还有另一个错误:C 字符串必须以 NUL 字节终止,所以你的 testString 应该这样定义:

testString:
    db "Test",0

【讨论】:

  • 是的,我贴错了,抱歉。
  • 我用本教程编写了这段代码youtu.be/WNfC7hpuO_U?t=11m52s 为什么它在没有退出的情况下在那里工作?
  • @BOAKGP 我不知道,我不会说波兰语。
  • @BOAKGP:不同版本的 Windows 可能不会启动任何额外的线程,因此当WinMain 返回时退出您的进程。
  • 好的,现在很清楚了。非常感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-27
  • 1970-01-01
  • 2017-05-12
  • 2011-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多