从 MS‑DOS 开始,我就知道使用中断进行系统调用。在旧论文中,我看到了int 80h
在 Linux 上调用系统函数的参考。很长一段时间以来,我知道int 80h
不赞成使用该syscall
指令。但我无法让它在我的 32 位机器上运行。
问题
syscall
指令只能在 64 位平台上使用吗?32位Linux不使用syscall
吗?
样品测试
在我的 32 位 Linux(Ubuntu Precise)上,该程序以核心转储终止:
global _start
_start:
mov eax, 4 ; 4 is write
mov ebx, 1 ; 1 is stdout
mov ecx, message ; address of string
mov edx, length ; number of bytes
syscall
mov eax, 1 ; 1 is exit
xor ebx, ebx ; return code 0
syscall
message:
db 10,"Hello, World",10,10
length equ $ - message
我试过用sysenter
而不是syscall
,但它以同样的方式崩溃。