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.
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.
Existuje několik variant spustitelných souborů a.out: OMAGIC, NMAGIC, QMAGIC nebo ZMAGIC.
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.