Che cos'è il formato di file ELF?
I file con estensione .elf memorizzano dati binari strutturati secondo lo standard Executable and Linkable Format - il formato predefinito per eseguibili e file oggetto per Linux, la maggior parte dei sistemi Unix-like e molte piattaforme embedded. Il formato è stato introdotto con Unix System V Release 4 dai Unix System Laboratories e successivamente ratificato come specifica portatile Tool Interface Standard (TIS).
I file ELF possono memorizzare i seguenti tipi di contenuti:
- File eseguibili per applicazioni e strumenti, spesso distribuiti come file .bin
- File oggetto compilati, che tipicamente portano l'estensione
.o - Librerie condivise - file con estensione .so
- Core dump (istantanee della memoria prodotte dopo il crash di un processo)
Il formato è costruito attorno a una struttura binaria ben definita. Ogni file .elf inizia con la sequenza magica di 4 byte 7F 45 4C 46 (0x7F seguito dalle lettere ASCII ELF) all'offset 0, seguita da campi di intestazione che identificano l'architettura di destinazione, la dimensione della parola (32-bit o 64-bit) e l'ordine dei byte (little-endian o big-endian). Due tabelle opzionali - la program header table e la section header table - descrivono quindi come i segmenti debbano essere caricati in fase di esecuzione e come le sezioni siano organizzate per il collegamento (linking).
Sebbene lo standard ELF sia stato sviluppato pensando ai sistemi Unix, è stato rapidamente adottato da altre piattaforme, incluse console di gioco come PlayStation 2 e Wii, Android e molti ambienti embedded. Il tipo MIME standard è application/x-elf. I contenuti di un file .elf non sono leggibili dall'uomo; strumenti come readelf e objdump (entrambi parte di GNU Binutils) possono ispezionare le sue intestazioni e disassemblare il suo codice senza eseguirlo.
Sicurezza e incolumità
RISCHIO: HIGHCome ogni eseguibile, un ELF può contenere malware - le botnet Linux/IoT (ad es. varianti Mirai) vengono distribuite come binari ELF, e un ELF viene eseguito con i tuoi privilegi una volta avviato. Esegui solo file ELF da fonti affidabili; non usare «chmod +x» ed eseguire download casuali. Ispeziona gli ELF sconosciuti in sicurezza con readelf/objdump o scansionali su VirusTotal prima dell'esecuzione. I file .elf homebrew per console sono a minor rischio (girano nella sandbox di un emulatore) ma è comunque bene ottenerli da fonti homebrew rinomate.
Dettagli del formato
in sintesiProgrammi che aprono file ELF
Dettagli tecnici
specifiche approfondite| Numero magico | `7F 45 4C 46` (0x7F seguito da ASCII `ELF`) all'offset di byte 0, presente in ogni file ELF valido |
| Tipo MIME | `application/x-elf` |
| Varianti dimensione parola | 32-bit (EI_CLASS = `01`) e 64-bit (EI_CLASS = `02`), codificati all'offset 4 nell'intestazione ELF |
| Campo ordine byte | EI_DATA all'offset 5: `01` = little-endian, `02` = big-endian; determinato dall'architettura hardware di destinazione |
| Tipi di file (e_type) | ET_EXEC (eseguibile), ET_REL (oggetto rilocabile), ET_DYN (oggetto condiviso o PIE), ET_CORE (core dump) |
| Architetture di destinazione | x86, x86-64, ARM, AArch64, MIPS, RISC-V, PowerPC, SPARC e molte altre, identificate dal campo `e_machine` nell'intestazione ELF |
| Identificatore OS/ABI | Il byte EI_OSABI all'offset 7 specifica l'ABI di destinazione: 0 = System V, 3 = Linux, 9 = FreeBSD, 12 = Solaris |
| Layout della struttura | Intestazione ELF → tabella intestazione programma opzionale (segmenti di caricamento runtime) → dati → tabella intestazione sezioni opzionale (sezioni tempo di collegamento) |
| Sezioni nominate principali | `.text` (codice), `.data` (dati inizializzati), `.bss` (dati inizializzati a zero), `.rodata` (costanti), `.symtab` / `.dynsym` (simboli), `.rel` / `.rela` (rilocazioni) |
| Collegamento dinamico | Gli oggetti condivisi vengono risolti al momento del caricamento dal linker runtime (`ld.so`); il percorso dell'interprete richiesto è memorizzato nell'intestazione del programma `PT_INTERP` |
| Informazioni di debug | I dati di debug DWARF sono incorporati nelle sezioni ELF `.debug_*` e possono essere rimossi dai binari di produzione con il comando `strip` |
| Eseguibili indipendenti dalla posizione | I binari PIE sono di tipo ET_DYN e supportano ASLR; il kernel Linux randomizza il loro indirizzo di caricamento base a ogni avvio |
| Strumenti di ispezione primari | `readelf -a` (intestazioni, simboli, sezioni) e `objdump -d` (disassemblaggio), entrambi forniti da GNU Binutils |
| Rilasciato | 1989 (Unix System V Release 4); adopted as the TIS/System V ABI standard |
| Standard aperto | Sì · royalty-free |
| Specifica | refspecs.linuxfoundation.org |
Conversioni ELF
Domande e risposte della community
chiesto dagli utentiAncora nessuna domanda - sii il primo a chiedere informazioni sui file ELF.