我需要在面向 Windows 平台的 x86 汇编代码中执行系统调用 (syscall)。
在Linux上,我只会做类似
int 0x80
的事情,但这在Windows上不起作用。在 Windows 上执行系统调用的代码应该是什么样的?
(如果重要的话,我正在使用 AT&T 语法并编写 64 位代码,但对于 Intel 语法和 32 位代码,答案应该是相同的。)
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