srpen

a.out (z výstupu assembleru ) je formát souboru používaný v dřívějších verzích Unixu . Používal se pro spustitelné soubory , kódy objektů a později pro sdílené knihovny .

V současné době a.out zůstává výchozím názvem souboru používaným některými kompilátory a linkery, když není zadán žádný výstupní název souboru, i když tento spustitelný soubor není ve formátu a.out.

použití

Formát a.out pro PDP-7 , podobný formátu použitému na PDP-11 , se objeví na prvním vydání Unixu. To bylo nahrazeno formátem COFF v AT&T Unix System V, který byl zase nahrazen formátem ELF v System V Release 4.

Ačkoli jej Berkeley Unix nadále používal, moderní systémy BSD od té doby přešly na ELF: NetBSD se při přechodu z verze 2.2 na 3.0 změnilo s verzí 1.5 a FreeBSD .

Formát a.out nemá přímou podporu pro ladění symbolů, ale lze jej použít se stabs  (en), které k ukládání dat používají specifické položky tabulky symbolů.

Linuxové jádro použít i a.out do verze 1.2, kde to bylo nahrazené ELF (byla přidána experimentální podpora pro ELF ve verzi 1.1.52). Tento přechod byl víceméně způsoben skutečností, že bylo obtížné vytvořit sdílené knihovny v tomto formátu, který vyžadoval například uložení virtuální adresy, na kterou byla knihovna načtena do paměti, aby soubor ld.so  (en) Linuxu může znát novou adresu sdílené knihovny.

Několik verzí BSD dokázalo udržet tento formát déle než Linux, hlavně proto, že implementace BSD a.out byla flexibilnější. MINIX_3  (en) přešel na formát ELF s verzí 3.2.0 a trvale přestal podporovat formát a.out s verzí 3.2.1, vydán 21. 2. 2013.

Formát

Existuje několik variant spustitelných souborů a.out: OMAGIC, NMAGIC, QMAGIC nebo ZMAGIC.

Struktura

Soubor a.out je rozdělen na sedm částí; zde jsou v pořadí:

hlavička exec ( hlavička exec  " ) obsahuje parametry použité jádrem k načtení a spuštění binárního souboru, stejně jako parametry použité linkerem (ld) k propojení spustitelného souboru s ostatními. Toto je jediná povinná sekce. textový segment ( „  textový segment  “ ) obsahuje strojový kód a data, která musí být načtena do paměti, když musí být program spuštěn. Lze jej načíst do oblasti paměti jen pro čtení. datový segment ( „  datový segment  “ ) obsahuje data inicializovaná samotným programem. Vždy se načte do paměťového segmentu, který je zapisovatelný. Přerozdělení textu ( „  přemístění textu  “ ) obsahuje záznamy používané linkerem k aktualizaci ukazatelů textového segmentu, když je propojeno více spustitelných souborů. data o realokaci ( „  přemístění dat  “ ) jako v části realokace textu , ale pro datový segment. Symboly tabulky ( „  tabulka symbolů  “ ) tabulka používaná editorem odkazů k nalezení adresy pojmenovaných proměnných nebo funkcí ( symbolů ) mezi různými binárními soubory. řetězec tabulka ( řetězec tabulka  " ) obsahuje jméno spojené se symbolem.

Poznámky a odkazy

  1. (in) Rupert Wood, "  " Co dělat s a.out '- seznam adres gcc-help  ' ,8. dubna 2002(zpřístupněno 2. června 2008 ) .
  2. (in) [PDF] „  a.out - výstup sestavení a propojení editoru  “ , Bell Labs ,3. listopadu 1971(zpřístupněno 2. června 2008 ) .
  3. (in) Daniel Barlow, „  Linux ELF HOWTO (v1.29)  “ ,14. července 1996(zpřístupněno 2. června 2008 ) .
  4. (in) [PDF] Ulrich Drepper , „  Jak psát sdílené knihovny - 1,1 trochu historie  “ ,20. srpna 2006(zpřístupněno 2. června 2008 )  :„Při zavádění sdílených knihoven musela být učiněna určitá rozhodnutí o návrhu, aby fungovala v omezeních a.out. (...) Ze všech těchto a dalších důvodů se Linux brzy převedl na použití binárního formátu ELF (Executable Linkage Format). ".
  5. (in) „  Mýty o BSD: BSD používá spustitelný formát a.out, je to zastaralá technologie  “ (přístup ke dni 2. června 2008 ) .
( fr ) Tento článek je částečně nebo zcela převzat z článku Wikipedie v angličtině s názvem „  A.out  “ ( viz seznam autorů ) .

Podívejte se také

Interní odkazy

externí odkazy