Стандарт формату ELF розрізняє кілька типів файлів:
- Переміщуваний файл - зберігає інструкції і дані, які можуть бути пов'язані з іншими об'єктними файлами. Результатом такого зв'язку може бути розділяється об'єктний файл або виконуваний файл. До цього типу належать об'єктні файли статичних бібліотек.
- Розділяється об'єктний файл - також містить інструкції і дані і може бути пов'язаний з іншими переміщуються файлами і розділяються об'єктними файлами, в результаті чого буде створено новий об'єктний файл, або при запуску програми на виконання операційна система може динамічно зв'язати його з виконуваним файлом програми, в результаті чого буде створено виконуваний образ програми. В останньому випадку мова йде про поділюваних бібліотеках.
- Виконуваний файл - містить повний опис, що дозволяє системі створити образ процесу. У тому числі: інструкції, дані, опис необхідних поділюваних об'єктних файлів і необхідну символьну і налагодження.
Файли ELF мають два типи розбиття. Програмний заголовок (program header) відповідає сегментам, які будуть використані при виконанні. Тема секцій (section header) перераховує секції виконуваного файлу
Кожен ELF файл складається з наступних частин:
Тема файлу
Поля заголовка файлу ELF
Масив 16 байт, кожен з яких визначає загальну характеристику файлу. Перші чотири байти в масиві визначають сигнатуру файлу і завжди повинні містити 0x 7f 0x45 0x4c 0x46 відповідно.
Індекс записи в таблиці розділів, що вказує на таблицю назв розділів.
Таблиця заголовків програми
Таблиця заголовків програми або таблиця заголовків сегментів розташована відразу після заголовка файлу і містить заголовки сегментів, кожен з яких описує окремий сегмент програми і його атрибути, такі як:
- Тип сегмента і дії операційної системи з даним сегментом.
- Розташування сегмента.
- Точка входу сегмента.
- Розмір сегмента.
- Прапори доступу до сегменту (запис, читання, виконання).
Інформація, що міститься в цій таблиці, становить інтерес для ядра системи, так як вказує йому, як зібрати образ процесу з сегментів.
Таблиця заголовків розділів
Вміст розділів і сегментів
Сегменти містять дані, необхідні для виконання файлу, а розділи містять інформацію для лінковки і обробку relocation. Кожен байт в файлі може ставитися не більше ніж до однієї секції.