Ich habe festgestellt, dass die Systemrufe x86 int $0x80
und amd64 syscall
unterschiedliche Nummern haben. Zum Beispiel ist sys_exit
syscall 1 in x86 und syscall 60 in amd64. Gibt es einen (historischen) Grund für die verschiedenen Systemrufnummerierungsschemata?Warum unterscheiden sich die Systemrufnummern in amd64 linux?
Antwort
Die syscall Schnittstelle soll sehr stabil sein und nur Zusätze sind erlaubt. Da die Syscall-Schnittstelle für jede Architektur anders ist, entschieden sich die Linux-Leute höchstwahrscheinlich dafür, etwas angesammelten Cruft zu bereinigen und die amd64-Syscalls von Grund auf neu zu starten.
Referenz: linux/Documentation/ABI/stable/syscalls
Diese Schnittstelle passt viel von der POSIX-Schnittstelle und basiert auf es und anderen Unix-basierten Schnittstellen. Es wird nur im Laufe der Zeit hinzugefügt, und Dinge nicht aus ihm entfernt werden.
Beachten Sie, dass diese Schnittstelle für jede Architektur unterschiedlich ist, die Linux unterstützt. In der architekturspezifischen Dokumentation finden Sie Details zu den Systemrufnummern, die jedem Syscall zugeordnet werden sollen.
- 1. Warum unterscheiden sich die eckigen Materialdefinitionen in meinem HEAD?
- 2. Killing Linux Socket von Shell (Gentoo AMD64)
- 3. Warum unterscheiden sich Build-Typen von Produktaromen?
- 4. Warum unterscheiden sich Monad-Transformatoren von Monaden?
- 5. Warum unterscheiden sich diese Memo-Funktionen?
- 6. UIBarButtonItem Größen unterscheiden sich
- 7. Warum unterscheiden sich Prototyp und Definition einer Funktion in C?
- 8. Warum unterscheiden sich Leerzeichen in HTML-Markup von CSS?
- 9. Warum unterscheiden sich geerbte Docker-Bilder in der Größe
- 10. == und% in% unterscheiden sich basierend auf Zeichencodierung?
- 11. Warum unterscheiden sich gerenderte Pixel von realen Pixeln?
- 12. Warum unterscheiden sich Auto- und Schablonentypabzüge für starre Initialisierer?
- 13. Warum und wie unterscheiden sich diese beiden Nullwerte?
- 14. JMeter-Berichte unterscheiden sich in Jenkins
- 15. Wie unterscheiden sich Zufallsgenerierungsmethoden in Python?
- 16. Warum unterscheiden src rpms
- 17. Warum unterscheiden sich die inverse t-Verteilungen für kleine Werte in Matlab und R?
- 18. Wie unterscheiden sich diese beiden Guids?
- 19. Wie unterscheiden sich diese beiden Aufrufe?
- 20. JPA oder JDBC, wie unterscheiden sie sich?
- 21. Wie kompilieren Sie für Linux x86 mit Linux amd64, cmake und g ++ kompilieren?
- 22. globale Variable in Namensraum - Werte unterscheiden sich in Threads
- 23. wo ist amd64 psABI?
- 24. Extrahieren Sie unterschiedliche Zeichen, die sich zwischen zwei Zeichenfolgen unterscheiden
- 25. die sich bewegenden Objekte erkennen und sie vom Hintergrund unterscheiden?
- 26. Wie unterscheiden sich die MATLAB-Funktionen plot und line?
- 27. Swift: Methodenüberladungen, die sich nur im Rückgabetyp unterscheiden
- 28. Vim Liste von Dateien erstellen, die sich vom Master unterscheiden
- 29. Warum speichert setjmp (3) nicht alle Register auf AMD64?
- 30. Gradle Build schlägt fehl in jenkins: alpine Container: UnbefriedigterLinkError: linux-amd64/libnative-platform.so: libstdC++.so.6:
Relevanter LKML-Beitrag: http://lkml.iu.edu/hypermail/linux/kernel/0104.0/0547.html –