1

我目前正在尝试学习一些基本的 x86 程序集,但在 Windows 上运行它时遇到了一些困难。我要做的就是设置退出状态。如果我在 Linux 上,我知道如何执行此操作:

global _start
_start:
    mov eax,1
    mov ebx, 52
    int 0x80

显然这将给出退出状态 52。我如何在 Windows 上执行此操作?我看了一遍,但找不到明确的答案。

4

1 回答 1

1

如何在 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 $?
于 2021-12-29T22:45:56.647 回答