GNU/Linux >> LINUX-Kenntnisse >  >> Linux

a.out durch ELF-Dateiformat ersetzt?

Soweit ich mich erinnere, besteht eines der ursprünglichen Probleme mit dem a.out-Format darin, dass es nur drei Abschnitte unterstützt:text, data und bss. ELF erlaubt eine beliebige Anzahl (oder zumindest viel mehr). Das a.out-Header-Format war sehr einfach, etwa so:

word <magic>
word <text size>
word <data size>
word <bss size>

Im Gegensatz dazu hat das ELF-Format Abschnittsüberschriften mit Namen, Größen usw.

Mehr Abschnitte ermöglichen die Standardabschnitte, geben uns aber auch const-Abschnitte, Konstruktor-Abschnitte und sogar einen Abschnitt pro Funktion, wenn wir das wollen.


Der a.out Format zwang Shared Libraries dazu, einen festen Platz im Speicher einzunehmen. Wenn Sie eine gemeinsam genutzte a.out-Bibliothek verteilen wollten, mussten Sie ihren Adressraum registrieren. Das war gut für die Leistung, aber es skaliert überhaupt nicht. Sehen Sie selbst, wie knifflig es war (linuxjournal).

Im Gegensatz dazu können in ELF gemeinsam genutzte Bibliotheken überall im Speicher geladen werden und können sogar für verschiedene Anwendungen, die auf demselben Computer ausgeführt werden, unter verschiedenen Adressen erscheinen (wobei der Code immer noch effektiv an nur einer Stelle im physischen Speicher geladen wird)! Um dies zu erreichen, muss in der IA-32-Architektur ein Register (%ebx) geopfert werden. Eine umfassendere Referenz, die zeigt, dass gemeinsam genutzte Bibliotheken in ELF komplizierter wurden, aber das war Compiler-seitige Komplexität, im Gegensatz zur Programmierer-Seite.


Linux
  1. Lösung:stdin:nicht im gzip-Format

  2. Unterschied zwischen Katze und „>“, um eine Datei auf Null zu setzen?

  3. Abschnitt zur ELF-Datei hinzufügen

  4. So finden Sie Dateien im DOS-Format in einem Linux-Dateisystem

  5. Core-Dump-Dateiformat

So formatieren Sie Festplattenpartitionen unter Linux

glibc:Elf-Datei OS ABI ungültig

Was ist der Unterschied zwischen Abschnitt und Segment im ELF-Dateiformat

Ändern des Datumsformats im Syslog

Indiziertes Archivformat?

GNU nano 2:DOS-Format oder Mac-Format unter Linux