我目前正在尝试学习一些基本的 x86 程序集,但在 Windows 上运行它时遇到了一些困难。我要做的就是设置退出状态。如果我在 Linux 上,我知道如何执行此操作:
global _start
_start:
mov eax,1
mov ebx, 52
int 0x80
显然这将给出退出状态 52。我如何在 Windows 上执行此操作?我看了一遍,但找不到明确的答案。
我目前正在尝试学习一些基本的 x86 程序集,但在 Windows 上运行它时遇到了一些困难。我要做的就是设置退出状态。如果我在 Linux 上,我知道如何执行此操作:
global _start
_start:
mov eax,1
mov ebx, 52
int 0x80
显然这将给出退出状态 52。我如何在 Windows 上执行此操作?我看了一遍,但找不到明确的答案。
如何在 Windows 上执行此操作?我看了一遍,但找不到明确的答案。
这就是这里的问题:没有明确的答案。Windoze是一团糟。使用 Linux 并快乐。:−)
正如已经提到的,没有与操作系统交互的通用方法。例如,在 WinD0S 上,它会是int 21h
:
segment code
start:
mov ah, 0x4C ; function `exit – terminate with return code`
mov al, 52 ; return code
int 0x21 ; DOS kernel interrupt
正如David Wohlferd已经指出的那样,您可能想要做的是使用ExitProcess
:
global start
extern _ExitProcess@4
section .text
start:
push 52
call _ExitProcess@4
在带有wine(1)
安装的 GNU/Linux Debian(-like) 系统上,步骤如下所示:
nasm -f win32 -o exitdemo.obj exitdemo.asm
i686-w64-mingw32-ld exitdemo.obj -lkernel32 -o exitdemo.exe
wine ./exitdemo.exe; echo $?