Ho notato che le chiamate di sistema x86 int $0x80
e amd64 syscall
hanno numeri diversi. Ad esempio, sys_exit
è syscall 1 in x86 e syscall 60 in amd64. C'è una ragione (storica) per i diversi sistemi di numerazione delle chiamate di sistema?Perché i numeri di chiamata di sistema sono diversi in amd64 linux?
12
A
risposta
12
L'interfaccia di syscall dovrebbe essere molto stabile e sono consentite solo aggiunte. Traendo vantaggio dal fatto che l'interfaccia di syscall è diversa per ogni architettura, i ragazzi di Linux hanno probabilmente deciso di ripulire alcuni cruft accumulati e avviare le amd64 syscalls da zero.
Riferimento: linux/Documentation/ABI/stable/syscalls
Questa interfaccia corrisponde gran parte l'interfaccia POSIX e si basa su di esso e altre interfacce basate su Unix. Verrà aggiunto solo nel tempo, e non verrà rimosso da esso.
Si noti che questa interfaccia è diversa per ogni architettura supportata da Linux. Consultare la documentazione specifica per l'architettura per i dettagli sui numeri di syscall che devono essere mappati su ogni syscall .
Post LKML pertinente: http://lkml.iu.edu/hypermail/linux/kernel/0104.0/0547.html –