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

  • Інформаційні технології Це незавершена стаття про інформаційні технології.
    Ви можете допомогти проєкту, виправивши або дописавши її.
    Операційні системи Це незавершена стаття про операційні системи.
    Ви можете допомогти проєкту, виправивши або дописавши її.


    П:  Портал «Інформаційні технології» П:  Портал «Вільне програмне забезпечення»