GNU/Linux >> Znalost Linux >  >> Linux

a.out nahrazeno formátem souboru ELF?

Pokud si vzpomínám, jedním z původních problémů formátu a.out je, že podporoval pouze tři sekce:text, data a bss. ELF umožňuje libovolné číslo (nebo alespoň mnohem více). Formát záhlaví a.out byl velmi jednoduchý, něco jako:

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

Naproti tomu formát ELF má záhlaví sekcí s názvy, velikostmi atd.

Více sekcí umožňuje standardní sekce, ale také nám poskytuje konstantní sekce, konstruktorové sekce a dokonce jednu sekci na funkci, pokud ji chceme.


a.out formát nutil sdílené knihovny zabírat pevné místo v paměti. Pokud jste chtěli distribuovat sdílenou knihovnu a.out, museli jste zaregistrovat její adresní prostor. To bylo dobré pro výkon, ale vůbec se to nezměnilo. Podívejte se sami, jak to bylo složité (linuxjournal).

Naproti tomu v ELF mohou být sdílené knihovny načteny kdekoli v paměti a mohou se dokonce zdát, že jsou na různých adresách pro různé aplikace běžící na stejném počítači (s kódem stále efektivně načteným pouze na jednom místě ve fyzické paměti)! Aby toho bylo dosaženo, v architektuře IA-32 je třeba obětovat registr (%ebx). Komplexnější reference ukazující, že sdílené knihovny se v ELF zkomplikovaly, ale to byla složitost na straně kompilátoru, na rozdíl od programátorské.


Linux
  1. Jak vyřešit:stdin:není ve formátu gzip

  2. Linux ELF Object File Format (a struktura záhlaví ELF) Základy

  3. Záhlaví souborů ELF

  1. Přidání sekce do souboru ELF

  2. Jak najít soubory ve formátu DOS v systému souborů linux

  3. glibc:elf soubor OS ABI je neplatný

  1. Změna formátu data v syslog

  2. id_rsa.pub soubor SSH Chyba:neplatný formát

  3. GNU nano 2:Formát DOS nebo Mac Format na Linuxu