warum Linux 64-Bit-Systemaufrufe Tabelle ist anders

689
Sidahmed

Ich habe gerade im Netz auf Linux-Systemnummern nachgeschaut und habe unterschiedliche Nummern gefunden, ob es sich um eine 32-Bit- oder 64-Bit-Linux-Version handelt.

Warum hat Linux die Reihenfolge der Systemaufrufe geändert? Wäre es nicht schwieriger, die Kompatibilität zwischen 32-Bit- und 64-Bit-Linux-Programmen zu erreichen?

Mehr Informationen :

  • Hier sind die Websites, auf denen das System Nummern gefunden hat: 32-Bit-Linux, 64-Bit-Linux .

  • Ich habe auch die Systemrufnummern in Linux-System gefunden, in diesen zwei Dateien: /usr/include/asm/unistd_32.hund /usr/include/asm/unistd_64.h.

Edit : Ich schrieb ein 32-Bit-Assembly-Hallo-Welt-Programm:

assembly program

Ich habe es mit dem Befehl nasm -f elf32 prog.asm && ld -m elf_i386 prog.okompiliert, es wird normal kompiliert und ausgeführt. Dann kompilierte ich dasselbe Programm mit dem Befehl, nasm -f elf64 prog.asm && ld -m elf_x86_64 prog.odass es abstürzt, aber es tat dasselbe wie das erste Programm, es schrieb "Hello World!" auf die Standardausgabe.

Wie ist es möglich, dass das 64-Bit-Programm dieselben Systemaufrufe wie das 32-Bit-Programm verwendet hat (obwohl die Tabelle des Systems für die beiden Architekturen unterschiedlich ist).

1
Vielleicht findest du einige Hinweise in dieser [Wiki-Seite] (https://en.wikipedia.org/wiki/System_call#Typical_implementations). Es wird angegeben, dass "das Implementieren von Systemaufrufen eine Steuerungsübertragung vom Benutzerraum in den Kernel-Code erfordert, die eine Art architekturspezifisches Merkmal beinhaltet", so dass sie sich mit Ausnahme von einem unterscheiden: _`__NR_syslog 103`_. Hastur vor 8 Jahren 0

0 Antworten auf die Frage