Wat is het ELF-bestandsformaat?
Bestanden met de extensie .elf slaan binaire gegevens op die zijn gestructureerd volgens de Executable and Linkable Format-standaard - het standaardformaat voor uitvoerbare bestanden en objectbestanden voor Linux, de meeste Unix-achtige systemen en veel embedded platforms. Het formaat werd geïntroduceerd met Unix System V Release 4 door Unix System Laboratories en later geratificeerd als een Tool Interface Standard (TIS) draagbare specificatie.
ELF-bestanden kunnen de volgende soorten inhoud bevatten:
- Uitvoerbare bestanden voor applicaties en tools, vaak gedistribueerd als een .bin-bestand
- Gecompileerde objectbestanden, meestal met de extensie
.o - Gedeelde bibliotheken - bestanden met de extensie .so
- Core dumps (geheugenmomentopnamen geproduceerd na een crash van een proces)
Het formaat is opgebouwd rond een goed gedefinieerde binaire structuur. Elk .elf-bestand begint met de magische reeks van 4 bytes 7F 45 4C 46 (0x7F gevolgd door de ASCII-letters ELF) op positie 0, gevolgd door header-velden die de doelarchitectuur, woordgrootte (32-bit of 64-bit) en bytevolgorde (little-endian of big-endian) identificeren. Twee optionele tabellen - de program header table en de section header table - beschrijven vervolgens hoe segmenten tijdens runtime moeten worden geladen en hoe secties zijn georganiseerd voor koppeling (linking).
Hoewel de ELF-standaard werd ontwikkeld met Unix-systemen in gedachten, werd deze snel overgenomen door andere platforms, waaronder spelcomputers zoals de PlayStation 2 en Wii, Android en veel embedded omgevingen. Het standaard MIME-type is application/x-elf. De inhoud van een .elf-bestand is niet leesbaar voor mensen; tools zoals readelf en objdump (beide onderdeel van GNU Binutils) kunnen de headers inspecteren en de code disassembleren zonder deze uit te voeren.
Beveiliging & veiligheid
RISICO: HIGHZoals elk uitvoerbaar bestand kan een ELF malware bevatten - Linux/IoT-botnets (bijv. Mirai-varianten) worden verspreid als ELF-binaries, en een ELF draait met jouw rechten zodra deze wordt uitgevoerd. Voer alleen ELF-bestanden uit van vertrouwde bronnen; gebruik geen „chmod +x” op willekeurige downloads. Inspecteer onbekende ELF's veilig met readelf/objdump of scan ze op VirusTotal voordat je ze uitvoert. Console homebrew .elf-bestanden zijn minder risicovol (ze draaien in de sandbox van een emulator), maar haal ze nog steeds van gerenommeerde homebrew-bronnen.
Formaatdetails
in een notendopProgramma's die ELF-bestanden openen
Technische details
diepe specificaties| Magisch getal | `7F 45 4C 46` (0x7F gevolgd door ASCII `ELF`) op byte-offset 0, aanwezig in elk geldig ELF-bestand |
| MIME-type | `application/x-elf` |
| Woordgrootte-varianten | 32-bit (EI_CLASS = `01`) en 64-bit (EI_CLASS = `02`), gecodeerd op offset 4 in de ELF-header |
| Byte-order veld | EI_DATA op offset 5: `01` = little-endian, `02` = big-endian; bepaald door de doelhardware-architectuur |
| Bestandstypen (e_type) | ET_EXEC (uitvoerbaar), ET_REL (verplaatsbaar object), ET_DYN (gedeeld object of PIE), ET_CORE (core dump) |
| Doelarchitecturen | x86, x86-64, ARM, AArch64, MIPS, RISC-V, PowerPC, SPARC en vele andere, geïdentificeerd door het `e_machine` veld in de ELF-header |
| OS/ABI-identificatie | EI_OSABI byte op offset 7 specificeert de doel-ABI: 0 = System V, 3 = Linux, 9 = FreeBSD, 12 = Solaris |
| Structuurlay-out | ELF-header → optionele program header table (runtime laadsegmenten) → data → optionele section header table (link-time secties) |
| Belangrijke benoemde secties | `.text` (code), `.data` (geïnitialiseerde data), `.bss` (op nul geïnitialiseerde data), `.rodata` (constanten), `.symtab` / `.dynsym` (symbolen), `.rel` / `.rela` (relocaties) |
| Dynamische koppeling | Gedeelde objecten worden tijdens het laden opgelost door de runtime linker (`ld.so`); het vereiste interpreterpad is opgeslagen in de `PT_INTERP` program header |
| Debug-informatie | DWARF-debuggegevens zijn ingebed in `.debug_*` ELF-secties en kunnen uit productie-binaries worden verwijderd met het commando `strip` |
| Positie-onafhankelijke uitvoerbare bestanden | PIE-binaries zijn van het type ET_DYN en ondersteunen ASLR; de Linux-kernel herinnert hun basislaadadres bij elke start |
| Primaire inspectietools | `readelf -a` (headers, symbolen, secties) en `objdump -d` (disassembly), beide geleverd door GNU Binutils |
| Uitgebracht | 1989 (Unix System V Release 4); adopted as the TIS/System V ABI standard |
| Open standaard | Ja · royaltyvrij |
| Specificatie | refspecs.linuxfoundation.org |
ELF conversies
Community V&A
gevraagd door gebruikersNog geen vragen - wees de eerste om iets te vragen over ELF-bestanden.