Executable and Linkable Format
Ця стаття потребує додаткових посилань на джерела для поліпшення її перевірності. Будь ласка, допоможіть удосконалити цю статтю, додавши посилання на надійні (авторитетні) джерела. Зверніться на сторінку обговорення за поясненнями та допоможіть виправити недоліки. Матеріал без джерел може бути піддано сумніву та вилучено. (липень 2016) |
ELF (англ. Executable and Linkable Format — формат виконання та зв'язування, раніше звався англ. Extensible Linking Format — розширюваний зв'язувальний формат) — формат виконуваного файла, об'єктних модулів, розділювальних бібліотек та системних дампів; використовується в багатьох Unix-подібних операційних системах, наприклад, в Linux, FreeBSD і Solaris.
Історія
ELF формат був розроблений і опублікований UNIX System Laboratories (USL), як частина двійкового бінарного інтерфейсу (ABI). Комітет з стандартів інтерфейсу (TIS) визначив ELF, як стандарт для портативних об'єктних файлів, що працюють на 32-бітних архітектурах компанії Intel, для різних операційних систем.
Структура
В заголовному файлі <elf.h> визначена структура, що описує ELF файли.
ELF файли бувають:
- виконуваними (normal executable files) — файли придатні для виконання, створює образ процесу (process image);
- об'єктними (relocatable object files) — містять код та дані, придатні для зв'язування (linking) з іншими об'єктними файлами для створення виконуваних;
- спільні об'єктні файли (shared object file) — містять код та дані, придатні для зв'язування у двох сенсах: статичне зв'язування (зв'язування з іншими об'єктними файлами під час процесу зв'язування для створення виконуваних файлів), динамічне зв'язування (звертання виконуваного файлу до спільних об'єктних файлів, для створення образу процесу).
Кожен файл формату ELF має ELF-заголовок (ELF header) (обов'язково), потім йде таблиця програмних заголовків (program header table) чи таблиця заголовків секцій (section header table), або і те, і інше. ELF-заголовок обов'язково має нульове зміщення у файлі (тобто знаходиться на його початку). Зміщення у файлі для таблиці програмних заголовків і таблиці заголовків секцій визначається у ELF-заголовку.
ELF-заголовок, таблиця програмних заголовків, таблиця заголовків секцій описуються, як структури C, які включають в себе інші типи, що також визначені у заголовному файлі <elf.h>.
Нижче перераховані типи, які використовують для N-бітної архітектури (N = 32 чи 64):
ElfN_Addr Беззнакова адреса, uintN_t ElfN_Off Беззнакове зміщення, uintN_t ElfN_Section Беззнаковий індекс секції, uint16_t ElfN_Versym Unsigned version symbol information, uint16_t Elf_Byte Беззнаковий char ElfN_Half uint16_t ElfN_Sword int32_t ElfN_Word uint32_t ElfN_Sxword int64_t ElfN_Xword uint64_t
Поля цієї таблиці використовує завантажувач (ELF interpreter) для запису програми в оперативну пам'ять перед виконуванням.
Робота з ELF файлами
Для роботи з ELF файлами використовують бібліотеку libelf.
Також можна використовувати програми з пакету GNU Binutils.
Література
- O'Neill, Ryan (2016). Learning Linux binary analysis uncover the secrets of Linux binary analysis with this handy guide. Birmingham: Packt Publishing. ISBN 978-1-78216-711-2. Процитовано 22 липня 2016.
Посилання
- Докладний опис ELF формату [Архівовано 16 червня 2012 у Wayback Machine.] (англ.)
- Як зробити Linux-програми меншими [Архівовано 12 квітня 2021 у Wayback Machine.] (рос.)
- Використання додаткових .ELF сегментів в QNX [Архівовано 20 листопада 2008 у Wayback Machine.] (рос.)
- п
- о
- р
- a.out
- AIF
- COFF
- CMD
- COM
- ECOFF
- ELF
- GOFF
- Hunk
- Mach-O
- MZ
- NE
- OMF
- OS/360
- PE
- PEF
- X
- XCOFF
- Порівняння форматів
- .exe
Це незавершена стаття про інформаційні технології. Ви можете допомогти проєкту, виправивши або дописавши її. |
Це незавершена стаття про операційні системи. Ви можете допомогти проєкту, виправивши або дописавши її. |
Портал «Інформаційні технології» Портал «Вільне програмне забезпечення» |