如何在 Windows 的 x86 程序集中编写系统调用? [重复]

问题描述 投票:0回答:1

我需要在面向 Windows 平台的 x86 汇编代码中执行系统调用 (syscall)。

在Linux上,我只会做类似

int 0x80
的事情,但这在Windows上不起作用。在 Windows 上执行系统调用的代码应该是什么样的?

(如果重要的话,我正在使用 AT&T 语法并编写 64 位代码,但对于 Intel 语法和 32 位代码,答案应该是相同的。)

windows assembly x86 system-calls
1个回答
0
投票

Windows 不允许您像在 DOS 或 Linux 上那样使用中断。您需要调用 WinAPI 或 C 库。在 32 位操作系统上,您有 NTVDM,这是 DOS 应用程序的虚拟机,允许您使用

int 21h
。请注意,在低级别访问磁盘(使用这些中断)的程序可能会被标记为误报。这是在不使用中断的情况下调用 Windows 函数的示例(尽管在 Windows 上进行汇编是无意义的):

global  _main
    extern  _printf

    section .text
_main:
    push    message
    call    _printf
    add     esp, 4
    ret
message:
    db  'Hello, World', 10, 0
© www.soinside.com 2019 - 2024. All rights reserved.