a.out (fra assembleroutput ) er et filformat som brukes i tidlige versjoner av Unix . Den ble brukt til kjørbare filer , objektkoder og senere delte biblioteker .
For tiden forblir a.out standardfilnavnet som brukes av noen kompilatorer og lenker når det ikke er angitt noe utdatafilnavn, selv om den kjørbare filen ikke er i a.out-formatet.
Et a.out- format for PDP-7 , som ligner på PDP-11 , vises på den første utgivelsen av Unix. Den ble erstattet av COFF- formatet i AT&T Unix System V, som igjen ble erstattet av ELF- formatet i System V Release 4.
Selv om Berkeley Unix fortsatte å bruke den, har moderne BSD- systemer siden migrert til ELF: NetBSD endret seg med versjon 1.5 og FreeBSD under overgangen fra versjon 2.2 til 3.0.
A.out- formatet har ikke direkte støtte for feilsøkingssymboler , men det kan brukes med stabs (en) som bruker spesifikke symboltabelloppføringer for å lagre data.
Den Linux-kjernen også anvendes a.out inntil versjon 1.2, hvor den ble erstattet av ELF (eksperimentell støtte for ELF ble tilsatt i versjon 1.1.52). Denne overgangen skyldtes mer eller mindre det faktum at det var vanskelig å lage delte biblioteker med denne typen format som for eksempel krevde å måtte lagre den virtuelle adressen der biblioteket ble lastet inn i minnet slik at ld.so (en) av Linux kan vite den nye adressen til det delte biblioteket.
Flere versjoner av BSD klarte å holde dette formatet lenger enn Linux, hovedsakelig fordi implementeringen av BSDs a.out var mer fleksibel. MINIX_3 (no) byttet til ELF-format med versjon 3.2.0 og avsluttet permanent støtte for a.out-format med versjon 3.2.1, utgitt 21.02.2013.
Det er flere varianter av a.out-kjørbare filer: OMAGIC, NMAGIC, QMAGIC eller ZMAGIC.
En a.out-fil er delt inn i syv seksjoner; her er de i orden:
header exec ( " exec header " ) inneholder parametrene som kjernen bruker for å laste og kjøre binærfilen, samt parametrene som brukes av linkeren (ld) for å koble den kjørbare filen til andre. Dette er den eneste obligatoriske delen. tekstsegment ( " tekstsegment " ) inneholder maskinkoden og dataene som må lastes inn i minnet når programmet må kjøres. Den kan lastes inn i et skrivebeskyttet minneområde. datasegment ( " datasegment " ) inneholder dataene initialisert av selve programmet. Den lastes alltid inn i et minnesegment som er skrivbart. Omfordeling av tekst ( " tekstflytting " ) inneholder poster som brukes av koblingen for å oppdatere tekstsegmentpekerne når flere kjørbare filer er lenket. omfordelingsdata ( " dataflytting " ) som i delen om allokering av tekst , men for datasegmentet. Tabellsymboler ( " symboltabell " ) tabell som brukes av lenkeeditoren for å finne adressen til navngitte variabler eller funksjoner ( symboler ) mellom forskjellige binære filer. strengbord ( " strengbord " ) inneholder navnet tilknyttet et symbol.