Executable and linkable format

Стандарт формату ELF розрізняє кілька типів файлів:

  • Переміщуваний файл - зберігає інструкції і дані, які можуть бути пов'язані з іншими об'єктними файлами. Результатом такого зв'язку може бути розділяється об'єктний файл або виконуваний файл. До цього типу належать об'єктні файли статичних бібліотек.
  • Розділяється об'єктний файл - також містить інструкції і дані і може бути пов'язаний з іншими переміщуються файлами і розділяються об'єктними файлами, в результаті чого буде створено новий об'єктний файл, або при запуску програми на виконання операційна система може динамічно зв'язати його з виконуваним файлом програми, в результаті чого буде створено виконуваний образ програми. В останньому випадку мова йде про поділюваних бібліотеках.
  • Виконуваний файл - містить повний опис, що дозволяє системі створити образ процесу. У тому числі: інструкції, дані, опис необхідних поділюваних об'єктних файлів і необхідну символьну і налагодження.

Executable and linkable format

Файли ELF мають два типи розбиття. Програмний заголовок (program header) відповідає сегментам, які будуть використані при виконанні. Тема секцій (section header) перераховує секції виконуваного файлу

Кожен ELF файл складається з наступних частин:

Тема файлу

Поля заголовка файлу ELF

Масив 16 байт, кожен з яких визначає загальну характеристику файлу. Перші чотири байти в масиві визначають сигнатуру файлу і завжди повинні містити 0x 7f 0x45 0x4c 0x46 відповідно.

Індекс записи в таблиці розділів, що вказує на таблицю назв розділів.

Таблиця заголовків програми

Таблиця заголовків програми або таблиця заголовків сегментів розташована відразу після заголовка файлу і містить заголовки сегментів, кожен з яких описує окремий сегмент програми і його атрибути, такі як:

  • Тип сегмента і дії операційної системи з даним сегментом.
  • Розташування сегмента.
  • Точка входу сегмента.
  • Розмір сегмента.
  • Прапори доступу до сегменту (запис, читання, виконання).

Інформація, що міститься в цій таблиці, становить інтерес для ядра системи, так як вказує йому, як зібрати образ процесу з сегментів.

Таблиця заголовків розділів

Вміст розділів і сегментів

Сегменти містять дані, необхідні для виконання файлу, а розділи містять інформацію для лінковки і обробку relocation. Кожен байт в файлі може ставитися не більше ніж до однієї секції.