Vad är filformatet ELF?
Filer med filändelsen .elf lagrar binär data strukturerad enligt standarden Executable and Linkable Format - standardformatet för körbara filer och objektfiler för Linux, de flesta Unix-liknande system och många inbäddade plattformar. Formatet introducerades med Unix System V Release 4 av Unix System Laboratories och ratificerades senare som en Tool Interface Standard (TIS) portabel specifikation.
ELF-filer kan lagra följande typer av innehåll:
- Körbara filer för applikationer och verktyg, ofta distribuerade som en .bin-fil
- Kompilerade objektfiler, som vanligtvis har filändelsen
.o - Delade bibliotek - filer med filändelsen .so
- Core-dumpar (ögonblicksbilder av minnet som skapas efter att en process kraschat)
Formatet är uppbyggt kring en väldefinierad binär struktur. Varje .elf-fil börjar med den 4 byte långa magiska sekvensen 7F 45 4C 46 (0x7F följt av ASCII-bokstäverna ELF) vid offset 0, följt av huvudfält (headers) som identifierar målarkitektur, ordstorlek (32-bitars eller 64-bitars) och byteordning (little-endian eller big-endian). Två valfria tabeller - program header table och section header table - beskriver sedan hur segment ska laddas vid körning och hur sektioner är organiserade för länkning.
Även om ELF-standarden utvecklades med Unix-system i åtanke, anammades den snabbt av andra plattformar, inklusive spelkonsoler som PlayStation 2 och Wii, Android och många inbäddade miljöer. Den standardiserade MIME-typen är application/x-elf. Innehållet i en .elf-fil är inte läsbart för människor; verktyg som readelf och objdump (båda delar av GNU Binutils) kan inspektera dess huvuden och disassemblera dess kod utan att exekvera den.
Säkerhet & trygghet
RISK: HIGHPrecis som alla körbara filer kan en ELF innehålla skadlig kod - Linux/IoT-botnät (t.ex. Mirai-varianter) levereras som ELF-binärer, och en ELF körs med dina rättigheter när den exekveras. Kör endast ELF-filer från betrodda källor; använd inte «chmod +x» och kör slumpmässiga nedladdningar. Inspektera okända ELF-filer säkert med readelf/objdump eller skanna dem på VirusTotal innan körning. Konsol-homebrew .elf-filer innebär lägre risk (de körs inuti en emulators sandlåda) men hämta dem ändå från välrenommerade homebrew-källor.
Formatdetaljer
i ett nötskalProgram som öppnar ELF-filer
Tekniska detaljer
djup specifikation| Magiskt nummer | `7F 45 4C 46` (0x7F följt av ASCII `ELF`) vid byte-offset 0, finns i varje giltig ELF-fil |
| MIME-typ | `application/x-elf` |
| Varianter av ordstorlek | 32-bitars (EI_CLASS = `01`) och 64-bitars (EI_CLASS = `02`), kodat vid offset 4 i ELF-huvudet |
| Fält för byteordning | EI_DATA vid offset 5: `01` = little-endian, `02` = big-endian; bestäms av målets hårdvaruarkitektur |
| Filtyper (e_type) | ET_EXEC (körbar), ET_REL (relokerbart objekt), ET_DYN (delat objekt eller PIE), ET_CORE (core-dump) |
| Målarkitekturer | x86, x86-64, ARM, AArch64, MIPS, RISC-V, PowerPC, SPARC och många andra, identifierade av fältet `e_machine` i ELF-huvudet |
| OS/ABI-identifierare | EI_OSABI-byte vid offset 7 specificerar mål-ABI: 0 = System V, 3 = Linux, 9 = FreeBSD, 12 = Solaris |
| Strukturlayout | ELF-huvud → valfri program header table (segment för laddning vid körning) → data → valfri section header table (sektioner för länkning) |
| Namngivna nyckelsektioner | `.text` (kod), `.data` (initierad data), `.bss` (noll-initierad data), `.rodata` (konstanter), `.symtab` / `.dynsym` (symboler), `.rel` / `.rela` (relokeringar) |
| Dynamisk länkning | Delade objekt löses vid laddning av körtidslänkaren (`ld.so`); sökvägen till den tolk som krävs lagras i programhuvudet `PT_INTERP` |
| Felsökningsinformation | DWARF-felsökningsdata är inbäddad i `.debug_*` ELF-sektioner och kan tas bort från produktionsbinärer med kommandot `strip` |
| Positionsoberoende körbara filer | PIE-binärer är av typen ET_DYN och stöder ASLR; Linux-kärnan randomiserar deras basadress vid varje start |
| Primära inspektionsverktyg | `readelf -a` (huvuden, symboler, sektioner) och `objdump -d` (disassemblering), båda tillhandahålls av GNU Binutils |
| Släppt | 1989 (Unix System V Release 4); adopted as the TIS/System V ABI standard |
| Öppen standard | Ja · royaltyfri |
| Specifikation | refspecs.linuxfoundation.org |
ELF-konverteringar
Frågor & svar
frågat av användareInga frågor än - bli den första att fråga om ELF-filer.