[Linuxtrent] Re: ELF / A.OUT

  • From: Matteo Ianeselli <m.ianeselli@xxxxxxxxxxx>
  • To: linuxtrent@xxxxxxxxxxxxx
  • Date: Sun, 14 Apr 2002 20:16:54 +0200

Lo'oRiS il Kabukimono writes:

 > Se ho capito bene in genere gli eseguibili linux sono ELF.

Ora si, una volta no. 

A prescindere dalla piattaforma, esistono vari formati per gli
eseguibili rilocabili (i.e. programmi e librerie shared), tra cui ELF,
COFF e AOUT e relative varianti credo siano i piu` noti (piu` altri
sotto-formati per le informazioni di debug ad uso dei debugger).

Fatto sta che, se non ho capito male, molti dei sistemi ad oggi sono
sistemi ELF, probabilmente perche` ELF crea meno casini rispetto agli
altri nella risoluzione dei simboli... 

Ad esempio, supponi di avere un eseguibile linkato staticamente con la
libreria A, e dinamicamente con la libreria B, e la libreria B a sua
volta usa simboli provvisti dalla libreria A, ma alcuni sono
ridefiniti nel programma... con ELF credo si riesca a gestire la cosa
in maniera relativamente semplice, con altri formati dubito.

Apropos, Windows mi pare usi un formato suo per eseguibili e librerie
condivise (PE, mi pare): ma e` vero che ogni DLL non deve avere
dipendenze non risolte, per cui bisogna linkarla staticamente con le
sue dipendenze (i.e. altre librerie .lib), e che se ci sono N DLL con
le stesse dipendenze finisci per tirartele dentro N volte (le
dipendenze)?

 > Nel kernel c'e` anche una voce per gli eseguibili A.OUT, che sembra
 > essere il vecchio formato (se si, l'elf e` un evoluzione o e`
 > completamente diverso?).

Non lo so per certo, ma credo che sia completamente diverso (leggevo
da qualche parte che con AOUT bisognava fare dei trucchi notevoli per
supportare l'uso di librerie condivise), e comunque casi del tipo di
cui sopra rimanevano poco gestibili.

 > Questo cos'ha a che fare col fatto che se in gcc non specifico un
 > nome di file, me lo chiama a.out ?

Credo relativamente poco: ``a.out'' e` solamente il nome di default
per il file di output dell'assemblatore (che non e` detto che sia in
formato AOUT).


-- 
Per iscriversi  (o disiscriversi), basta spedire un  messaggio con SOGGETTO
"subscribe" (o "unsubscribe") a mailto:linuxtrent-request@xxxxxxxxxxxxxxxxx


Other related posts: