Co to jest format pliku ELF?
Pliki z rozszerzeniem .elf przechowują dane binarne ustrukturyzowane zgodnie ze standardem Executable and Linkable Format - domyślnym formatem plików wykonywalnych i obiektowych dla systemu Linux, większości systemów uniksopodobnych oraz wielu platform wbudowanych. Format ten został wprowadzony wraz z Unix System V Release 4 przez Unix System Laboratories, a później zatwierdzony jako przenośna specyfikacja Tool Interface Standard (TIS).
Pliki ELF mogą przechowywać następujące typy treści:
- Pliki wykonywalne dla aplikacji i narzędzi, często dystrybuowane jako plik .bin
- Skompilowane pliki obiektowe, zazwyczaj z rozszerzeniem
.o - Biblioteki współdzielone - pliki z rozszerzeniem .so
- Zrzuty pamięci (core dumps - migawki pamięci generowane po awarii procesu)
Format opiera się na ściśle zdefiniowanej strukturze binarnej. Każdy plik .elf zaczyna się od 4-bajtowej magicznej sekwencji 7F 45 4C 46 (0x7F, a następnie litery ASCII ELF) pod offsetem 0, po której następują pola nagłówka identyfikujące docelową architekturę, rozmiar słowa (32-bitowy lub 64-bitowy) oraz kolejność bajtów (little-endian lub big-endian). Dwie opcjonalne tabele - tabela nagłówków programu (program header table) oraz tabela nagłówków sekcji (section header table) - opisują odpowiednio sposób ładowania segmentów w czasie wykonywania oraz organizację sekcji na potrzeby konsolidacji (linkowania).
Choć standard ELF został opracowany z myślą o systemach Unix, został szybko zaadoptowany przez inne platformy, w tym konsole do gier, takie jak PlayStation 2 i Wii, system Android oraz wiele środowisk wbudowanych. Standardowy typ MIME to application/x-elf. Zawartość pliku .elf nie jest czytelna dla człowieka; narzędzia takie jak readelf i objdump (oba będące częścią GNU Binutils) pozwalają na inspekcję nagłówków i deasemblację kodu bez jego uruchamiania.
Bezpieczeństwo
RYZYKO: HIGHJak każdy plik wykonywalny, ELF może zawierać złośliwe oprogramowanie - botnety Linux/IoT (np. warianty Mirai) są rozpowszechniane jako pliki binarne ELF, a ELF po uruchomieniu działa z Twoimi uprawnieniami. Uruchamiaj pliki ELF tylko z zaufanych źródeł; nie nadawaj uprawnień „chmod +x” i nie wykonuj przypadkowych pobranych plików. Bezpiecznie sprawdzaj nieznane pliki ELF za pomocą readelf/objdump lub skanuj je w serwisie VirusTotal przed uruchomieniem. Pliki .elf homebrew na konsole niosą mniejsze ryzyko (działają w piaskownicy emulatora), ale nadal należy je pobierać z renomowanych źródeł homebrew.
Szczegóły formatu
w pigułceProgramy otwierające pliki ELF
Szczegóły techniczne
specyfikacja| Liczba magiczna | `7F 45 4C 46` (0x7F, a następnie ASCII `ELF`) pod offsetem 0, obecna w każdym poprawnym pliku ELF |
| Typ MIME | `application/x-elf` |
| Warianty rozmiaru słowa | 32-bitowy (EI_CLASS = `01`) i 64-bitowy (EI_CLASS = `02`), zakodowane pod offsetem 4 w nagłówku ELF |
| Pole kolejności bajtów | EI_DATA pod offsetem 5: `01` = little-endian, `02` = big-endian; określane przez docelową architekturę sprzętową |
| Typy plików (e_type) | ET_EXEC (wykonywalny), ET_REL (obiekt relokowalny), ET_DYN (obiekt współdzielony lub PIE), ET_CORE (zrzut pamięci) |
| Architektury docelowe | x86, x86-64, ARM, AArch64, MIPS, RISC-V, PowerPC, SPARC i wiele innych, identyfikowane przez pole `e_machine` w nagłówku ELF |
| Identyfikator OS/ABI | Bajt EI_OSABI pod offsetem 7 określa docelowe ABI: 0 = System V, 3 = Linux, 9 = FreeBSD, 12 = Solaris |
| Układ struktury | Nagłówek ELF → opcjonalna tabela nagłówków programu (segmenty ładowania runtime) → dane → opcjonalna tabela nagłówków sekcji (sekcje czasu linkowania) |
| Kluczowe nazwane sekcje | `.text` (kod), `.data` (dane zainicjowane), `.bss` (dane zainicjowane zerami), `.rodata` (stałe), `.symtab` / `.dynsym` (symbole), `.rel` / `.rela` (relokacje) |
| Linkowanie dynamiczne | Obiekty współdzielone są rozwiązywane w czasie ładowania przez linker dynamiczny (`ld.so`); ścieżka do wymaganego interpretera jest przechowywana w nagłówku programu `PT_INTERP` |
| Informacje debugowania | Dane debugowania DWARF są osadzone w sekcjach ELF `.debug_*` i mogą zostać usunięte z produkcyjnych plików binarnych za pomocą polecenia `strip` |
| Pliki wykonywalne niezależne od pozycji | Pliki binarne PIE mają typ ET_DYN i obsługują ASLR; jądro Linux losuje ich bazowy adres ładowania przy każdym uruchomieniu |
| Podstawowe narzędzia inspekcji | `readelf -a` (nagłówki, symbole, sekcje) oraz `objdump -d` (deasemblacja), oba dostarczane przez GNU Binutils |
| Wydano | 1989 (Unix System V Release 4); adopted as the TIS/System V ABI standard |
| Otwarty standard | Tak · bezpłatny (royalty-free) |
| Specyfikacja | refspecs.linuxfoundation.org |
Konwersje ELF
Pytania i odpowiedzi społeczności
pytania użytkownikówBrak pytań - bądź pierwszą osobą, która zapyta o pliki ELF.