从MS-DOS开始,我知道使用中断的系统调用.在旧文章中,我看到引用int 80h来调用
Linux上的系统函数.由于现在相当长的一段时间,我知道int 80h已被弃用而不支持syscall指令.但我不能让它在我的32位机器上工作.
这个问题
syscall指令只能在64位平台上使用吗? 32位Linux不使用系统调用吗?
样品测试
在我的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,但它以同样的方式崩溃.