Syscall lub sysenter na 32-bitowym Linuksie?
Od MS-DOS wiem, że wywołanie systemu odbywa się za pomocą przerwań. W starych gazetach widziałem odniesienie doint 80h
, aby wywołać funkcje systemowe w systemie Linux. Od dłuższego czasu wiemint 80h
jest przestarzałe na rzeczsyscall
instrukcja. Ale nie mogę go uruchomić na mojej 32-bitowej maszynie.
Jestsyscall
instrukcja do użycia tylko na platformie 64-bitowej? Nie 32-bitowy Linux używasyscall
?
Na moim 32-bitowym Linuksie (Ubuntu Precise) ten program kończy się zrzutem rdzenia:
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
Próbowałem zsysenter
zamiastsyscall
, ale ulega awarii w ten sam sposób.