Syscall oder Sysenter unter 32-Bit-Linux?
Seit MS-DOS kenne ich den Systemaufruf mit Interrupts. In alten Zeitungen sah ich Verweis aufint 80h
, um Systemfunktionen unter Linux aufzurufen. Ich weiß schon ziemlich lange,int 80h
ist veraltet zu Gunsten dessyscall
Anweisung. Aber ich kann es auf meinem 32-Bit-Rechner nicht zum Laufen bringen.
Ist dersyscall
-Anweisung, die nur auf 64-Bit-Plattformen verwendet werden soll? 32-Bit-Linux nutzt nichtsyscall
?
Auf meinem 32-Bit-Linux (Ubuntu Precise) endet dieses Programm mit einem Core-Dump:
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
Ich habe es mit @ versucsysenter
anstattsyscall
, aber es stürzt auf die gleiche Weise ab.