Executable and Linkable Format

Technology
12 hours ago
8
4
2
Avatar
Author
Albert Flores

Základní schéma souborového formátu Executable and Linkable Format (ELF), používaného např. operačním systémem Linux. Executable and Linkable Format (zkratka ELF) je v informatice standardní souborový formát pro uložení spustitelných souborů, linkovatelných objektů, dynamických (sdílených) knihoven a ladících výpisů (core dumps). ELF formát je poměrně rozšířený, v současnosti ho využívají operační systémy jako Linux, Solaris, IRIX, FreeBSD, NetBSD, OpenBSD a další. ELF formát se také objevuje u konzolí (PlayStation 2, PlayStation Portable a PlayStation 3). Formát byl původně vyvinut v Unix System Laboratories pro operační systém UNIX System V.

Nasazení

ELF nahradil formáty spustitelných souborů jako jsou a. +moreout, COFF, PE, Mach-O nebo COM. Podle mnohých uživatelů ELF překonává ostatní formáty proto, že jsou buď závislé na platformě nebo jsou méně rozšiřitelné. Mimo unixové systémy je ELF použit v operačním systému OpenVMS ve verzi pro Itanium procesor nebo v systému BeOS Revision 4, kde nahrazuje PE formát (Portable Executable) na starších x86 počítačích (PPC verze zůstala při formátu Preferred Executable Format a nikdy nepoužívala PE).

Popis formátu ELF

Soubor ELF vždy obsahuje hlavičku, která může být následována segmenty a sekcemi. Segmenty obsahují informace nutné pro běh programového kódu. +more Jsou mapovány operačním systémem UN*X do virtuálního adresového prostoru pomocí systémového volání mmap(2). Sekce obsahují informace pro linker (spojování) a relokaci (přepočet adresy) objektů, které jsou umístěny v operační paměti počítače.

Typy souborů

spustitelný soubor (ET_EXEC) - musí obsahovat segmenty * objektový soubor (ET_REL, *. o) - musí obsahovat sekce, odkazuje na další objektové soubory * dynamické knihovny (ET_DYN, *. +moreso) - musí obsahovat segmenty i sekce, odkazuje na další objektové nebo spustitelné soubory * soubor s výpisem ladících informací (ET_CORE) - neobsahuje segmenty ani sekce, generován při fatální chybě a selhání programu.

Struktura

hlavička ELF - základní informace o typu souboru, umístění dalších částí ELF souboru * hlavička tabulky programů - popis dostupných segmentů * hlavička tabulky sekcí - popis dostupných sekcí * údaje odkazované položkami z hlavičky tabulky programů nebo sekcí

V případě unixového spustitelného souboru obsahuje každý segment několik sekcí. Platí, že každý bajt souboru je součástí nejvýše jedné sekce.

ELF hlavička

AtributVýznam
e_identidentifikace ELF (magic number), typ architektury, verze ABI,...
e_type#Typy souborů|typ objektového souboru
e_machinecílová architektura
e_versionverze objektového souboru
e_entryvirtuální adresa vstupního bodu programu
e_phoffukazatel na pozici tabulky programů v souboru
e_shoffukazatel na pozici tabulky sekcí v souboru
e_flagsprocesorové příznaky
e_ehsizevelikost ELF hlavičky (v bajtech)
e_phentsizevelikost záznamu v tabulce programů (v bajtech)
e_phnumpočet záznamů v tabulce programů
e_shentsizevelikost záznamu v tabulce sekcí (v bajtech)
e_shnumpočet záznamů v tabulce sekcí
e_shstrndxodkaz na tabulku řetězců

Hlavička tabulky programů

AtributVýznam
p_typetyp segmentu
p_offsetpozice 1. bajtu segmentu od počátku souboru
p_vaddrvirtuální adresa 1. +more bajtu segmentu v operační paměti
p_paddrfyzická adresa uložení segmentu v operační paměti
p_fileszdélka segmentu v souboru (v bajtech)
p_memszvelikost paměti pro daný segment (v bajtech)
p_flagspříznaky daného segmentu
p_alignzarovnání segmentu v operační paměti a v rámci souboru
.

Typy segmentů
AtributHodnotaPopis
PT_NULL0[nevyužito]
PT_LOAD1označuje segment, který bude nahrán do operační paměti
PT_DYNAMIC2informace pro zavaděč
PT_INTERP3cesta k interpretu programu ELF
PT_NOTE4pomocné informace o programu (požadavky na OS/ABI, min. verzi jádra,. +more)
PT_SHLIB5[rezervováno]
PT_PHDR6pozice a velikost tabulky programů
.

Nástroje

readelf je Unixová binární utilita, která zobrazuje informace o jednom nebo více ELF souborech; GNU implementace pochází z GNU Binutils * elfdump je příkaz v Solarisu na prohlížení informací uložených v ELF souboru * objdump poskytuje široký rozsah informací o ELF souborech a jiných objektových formátech

ELF v operačních systémech

Formát ELF nahradil některé starší spustitelné soubory v různých aplikačních prostředích. Je využíván v těchto operačních systémech:

* Linux * Solaris * Irix * FreeBSD * NetBSD * OpenBSD * DragonFly BSD * Syllable * HP-UX * BeOS * Syllable * Haiku

Kromě již zmíněných herních konzolí je používán také v některých operačních systémech pro mobilní zařízení:

* Symbian OS 9 * Bada OS

FatELF

FatELF je rozšířením binárního formátu ELF, který umožňuje, aby spustitelný soubor obsahoval kód pro různé počítačové platformy. Kromě oddělení architektury procesoru (pořadí bajtů, velikost slova (32/64bit), instrukční sady atd. +more) je potenciální výhodou oddělení softwarových platforem (např. soubory, které podporují několik verzí ABI jádra pro stejnou platformu).

Reference

5 min read
Share this post:
Like it 8

Leave a Comment

Please, enter your name.
Please, provide a valid email address.
Please, enter your comment.
Enjoy this post? Join Cesko.wiki
Don’t forget to share it
Top