Системный вызов или sysenter на 32-битном Linux?
С 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
, но он падает так же.