august

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.

bruk

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.

Formatet

Det er flere varianter av a.out-kjørbare filer: OMAGIC, NMAGIC, QMAGIC eller ZMAGIC.

Struktur

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.

Merknader og referanser

  1. (i) Rupert Wood, "  " Hva skal jeg gjøre med a.out '- mailinglisten gcc-help  ' ,8. april 2002(åpnet 2. juni 2008 ) .
  2. (in) [PDF] "  a.out - monter og lenke redigeringsutgang  " , Bell Labs ,3. november 1971(åpnet 2. juni 2008 ) .
  3. (in) Daniel Barlow, "  The Linux ELF HOWTO (v1.29)  " ,14. juli 1996(åpnet 2. juni 2008 ) .
  4. (in) [PDF] Ulrich Drepper , "  How To Write Shared Libraries - 1.1 A Little Bit of History  " ,20. august 2006(åpnet 2. juni 2008 )  :“Når vi innførte delte biblioteker, måtte det tas visse designbeslutninger for å fungere i begrensningene for a.out. (...) Av alle disse grunnene og mer konverterte Linux tidlig til å bruke ELF (Executable Linkage Format) som binært format. ".
  5. (in) "  BSD Myter: BSD bruker det kjørbare formatet a.out, qui est outdated technology  " (åpnet 2. juni 2008 ) .
( fr ) Denne artikkelen er helt eller delvis hentet fra Wikipedia-artikkelen på engelsk med tittelen A.out  " ( se forfatterlisten ) .

Se også

Interne lenker

Eksterne linker