Hvad er ELF-filformatet?
Filer med filtypenavnet .elf gemmer binære data struktureret i henhold til Executable and Linkable Format-standarden - standardformatet for eksekverbare filer og objektfiler til Linux, de fleste Unix-lignende systemer og mange indlejrede platforme. Formatet blev introduceret med Unix System V Release 4 af Unix System Laboratories og senere ratificeret som en Tool Interface Standard (TIS) bærbar specifikation.
ELF-filer kan gemme følgende typer indhold:
- Eksekverbare filer til applikationer og værktøjer, ofte distribueret som en .bin-fil
- Kompilerede objektfiler, der typisk bærer filtypenavnet
.o - Delte biblioteker (shared libraries) - filer med filtypenavnet .so
- Core dumps (hukommelses-snapshots produceret efter et procesnedbrud)
Formatet er bygget op omkring en veldefineret binær struktur. Enhver .elf-fil begynder med den 4-byte magiske sekvens 7F 45 4C 46 (0x7F efterfulgt af ASCII-bogstaverne ELF) ved offset 0, efterfulgt af header-felter, der identificerer målarkitekturen, ordstørrelse (32-bit eller 64-bit) og byterækkefølge (little-endian eller big-endian). To valgfrie tabeller - program header table og section header table - beskriver derefter, hvordan segmenter skal indlæses ved kørsel, og hvordan sektioner er organiseret til linkning.
Selvom ELF-standarden blev udviklet med Unix-systemer for øje, blev den hurtigt adopteret af andre platforme, herunder spillekonsoller som PlayStation 2 og Wii, Android og mange indlejrede miljøer. Standard MIME-typen er application/x-elf. Indholdet af en .elf-fil er ikke læsbart for mennesker; værktøjer som readelf og objdump (begge en del af GNU Binutils) kan inspicere dens headere og disassemblere dens kode uden at eksekvere den.
Sikkerhed og tryghed
RISIKO: HIGHSom enhver eksekverbar fil kan en ELF indeholde malware - Linux/IoT-botnet (f.eks. Mirai-varianter) leveres som ELF-binærfiler, og en ELF kører med dine rettigheder, når den først er eksekveret. Kør kun ELF-filer fra betroede kilder; lad være med at bruge «chmod +x» og eksekvere tilfældige downloads. Inspicer ukendte ELF-filer sikkert med readelf/objdump eller scan dem på VirusTotal før kørsel. Konsol-homebrew .elf-filer er forbundet med lavere risiko (de kører i en emulators sandkasse), men hent dem stadig fra anerkendte homebrew-kilder.
Formatdetaljer
kort fortaltProgrammer der åbner ELF-filer
Tekniske detaljer
dyb specifikation| Magic number | `7F 45 4C 46` (0x7F efterfulgt af ASCII `ELF`) ved byte-offset 0, findes i enhver gyldig ELF-fil |
| MIME-type | `application/x-elf` |
| Varianter af ordstørrelse | 32-bit (EI_CLASS = `01`) og 64-bit (EI_CLASS = `02`), kodet ved offset 4 i ELF-headeren |
| Byterækkefølge-felt | EI_DATA ved offset 5: `01` = little-endian, `02` = big-endian; bestemt af mål-hardwarearkitekturen |
| Filtyper (e_type) | ET_EXEC (eksekverbar), ET_REL (relokerbar objektfil), ET_DYN (delt objekt eller PIE), ET_CORE (core dump) |
| Målarkitekturer | x86, x86-64, ARM, AArch64, MIPS, RISC-V, PowerPC, SPARC og mange andre, identificeret ved `e_machine`-feltet i ELF-headeren |
| OS/ABI-identifikator | EI_OSABI-byte ved offset 7 specificerer mål-ABI: 0 = System V, 3 = Linux, 9 = FreeBSD, 12 = Solaris |
| Strukturlayout | ELF-header → valgfri program header table (runtime load-segmenter) → data → valgfri section header table (link-time sektioner) |
| Vigtige navngivne sektioner | `.text` (kode), `.data` (initialiseret data), `.bss` (nul-initialiseret data), `.rodata` (konstanter), `.symtab` / `.dynsym` (symboler), `.rel` / `.rela` (relokeringer) |
| Dynamisk linkning | Delte objekter løses ved indlæsning af runtime-linkeren (`ld.so`); den påkrævede sti til fortolkeren gemmes i `PT_INTERP` program-headeren |
| Debug-information | DWARF-debug-data er indlejret i `.debug_*` ELF-sektioner og kan fjernes fra produktions-binærfiler med kommandoen `strip` |
| Positionsuafhængige eksekverbare filer | PIE-binærfiler er af typen ET_DYN og understøtter ASLR; Linux-kernen randomiserer deres base-indlæsningsadresse ved hver start |
| Primære inspektionsværktøjer | `readelf -a` (headere, symboler, sektioner) og `objdump -d` (disassembly), begge leveret af GNU Binutils |
| Udgivet | 1989 (Unix System V Release 4); adopted as the TIS/System V ABI standard |
| Åben standard | Ja · royaltyfri |
| Specifikation | refspecs.linuxfoundation.org |
ELF-konverteringer
Fællesskabets Q&A
spurgt af brugereIngen spørgsmål endnu - vær den første til at spørge om ELF-filer.