2010-02-28 10 views
10

Ho alcune domande:a.out sostituito dal formato di file ELF?

  • Perché è stato sostituito dal a.outELF?
  • Quali sono stati i principali difetti nel formato a.out che hanno portato all'aumento del formato di file ELF?
  • I core dump precedenti erano basati su a.out, ma ora sono basati su ELF. Quali sono i vari vantaggi offerti da ELF?
+1

Avete mai fatto ricerche su questo? Non hai detto cosa hai cercato ecc ... – t0mm13b

+1

Sì, ho fatto qualche ricerca http://en.wikipedia.org/wiki/A.out- "La transizione di Linux a ELF è stata più o meno forzata a causa del complesso la natura della creazione di librerie condivise a.out su quella piattaforma, che includeva la necessità di registrare lo spazio di indirizzamento virtuale in cui si trovava la libreria con un'autorità centrale, dato che a.out ld.so in Linux non era in grado di ricollocare le librerie condivise. I vari sapori di BSD sono stati in grado di continuare a utilizzare binari a.out molto tempo dopo che Linux è stato costretto a passare a ELF, a causa della natura un po 'più flessibile del formato a.out BSD rispetto a quello di Linux ". –

risposta

14

Il formato a.out ha forzato le librerie condivise a occupare un posto fisso in memoria. Se si desidera distribuire una libreria condivisa a.out, è necessario registrare lo spazio indirizzo. Questo è stato positivo per le prestazioni, ma non è stato affatto ridimensionato. Guarda tu stesso how tricky it was (linuxjournal).

Al contrario, in ELF, le librerie condivise possono essere caricate in qualsiasi punto della memoria e possono persino apparire in indirizzi diversi a diverse applicazioni in esecuzione sullo stesso computer (con il codice ancora caricato in modo efficace in un solo punto nella memoria fisica)! Per ottenere ciò, nell'architettura IA-32, un registro (% ebx) deve essere sacrificato. A more comprehensive reference che mostra che le librerie condivise sono diventate più complicate in ELF, ma questa è stata la complessità del compilatore, al contrario del lato del programmatore.

+0

Sarei interessato a sapere come è stato usato ebx prima e dopo, e anche quale coff ha fatto diversamente dall'elfo –

+0

@EvanCarroll La domanda originale non si riferisce affatto a COFF. Il tuo commento sembra una nuova domanda, che ti invito a chiedere. –

+0

@EvanCarroll In a.out, ebx è disponibile per il codice dell'utente come registro generale. Nell'ABI ELF x86 (32 bit), ebx contiene l'indirizzo della tabella di offset globale (GOT) in modo che non sia disponibile per il codice utente. Le funzioni foglia, funzioni che non chiamano altre funzioni, possono salvarla e usarla, ma a differenza di un registro di salvataggio di un file, non è sufficiente salvarlo in entrata per poterlo utilizzare in generale. –

0

Come ricordo, uno dei problemi originali con il formato a.out è che supportava solo tre sezioni: testo, dati e bss. ELF consente qualsiasi numero (o almeno molti altri). Il formato di intestazione a.out era molto semplice, qualcosa di simile:

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

Il formato ELF, al contrario, ha intestazioni di sezione, con nomi, formati, ecc

Avere più sezioni consente di sezioni standard ma ci fornisce anche sezioni const, sezioni del costruttore e anche una sezione per funzione, se lo vogliamo.

+1

Questo spiega le differenze, ma non spiega cosa c'è di così sbagliato in a.out o perché avere più sezioni è meglio –

1

Un po 'di banalità: a.out era l'acronimo di Assembler OUTput e fino ad oggi gcc compilerà il codice C e assegna automaticamente il nome al file di output a.out, a meno che non venga specificato un altro nome di output, sebbene il file di output sia ancora ELFO. Questo è stato un passatempo dai tempi in cui il codice è stato tradotto direttamente nell'output dell'assemblatore ... bello vedere l'eredità che vive nello spirito !!

Spero che questo aiuti, Cordiali saluti, Tom.

+3

Si noti che sebbene gcc usi di default il nome 'a.out', il formato è ancora ELF. – hlovdal

+0

@hlovdal: true! :) – t0mm13b

+0

chi ha downvoted questo? ovviamente il downvoter non capisce! Per favore lasciate un commento su di esso ... e non essere abbagliante accecante e * NON * lasciare un commento! – t0mm13b

Problemi correlati