Читаем Операционная система UNIX полностью

Сегмент данных включает инициализированные данные, копируемые в память из соответствующих разделов исполняемого файла, и неинициализированные данные, которые заполняются нулями перед началом выполнения процесса. Неинициализированные данные часто называют сегментом BSS.

<p>Формат ELF</p>

Формат ELF имеет файлы нескольких типов, которые до сих пор мы называли по-разному, например, исполняемый файл или объектный файл. Тем не менее стандарт ELF различает следующие типы:

1. Перемещаемый файл (relocatable file), хранящий инструкции и данные, которые могут быть связаны с другими объектными файлами. Результатом такого связывания может быть исполняемый файл или разделяемый объектный файл.

2. Разделяемый объектный файл (shared object file) также содержит инструкции и данные, но может быть использован двумя способами. В первом случае, он может быть связан с другими перемещаемыми файлами и разделяемыми объектными файлами, в результате будет создан новый объектный файл. Во втором случае, при запуске программы на выполнение операционная система может динамически связать его с исполняемым файлом программы, в результате чего будет создан исполняемый образ программы. В последнем случае речь идет о разделяемых библиотеках.

3. Исполняемый файл хранит полное описание, позволяющее системе создать образ процесса. Он содержит инструкции, данные, описание необходимых разделяемых объектных файлов, а также необходимую символьную и отладочную информацию.

На рис. 2.4 приведена структура исполняемого файла, с помощью которого операционная система может создать образ программы и запустить программу на выполнение.

Рис. 2.4. Структура исполняемого файла в формате ELF

Заголовок имеет фиксированное расположение в файле. Остальные компоненты размещаются в соответствии с информацией, хранящейся в заголовке. Таким образом заголовок содержит общее описание структуры файла, расположение отдельных компонентов и их размеры.

Поскольку заголовок ELF-файла определяет его структуру, рассмотрим его более подробно (табл. 2.4).

Таблица 2.3. Поля заголовка ELF-файла

ПолеОписание
е_ident[]Массив байт, каждый из которых определяет некоторую общую характеристику файла: формат файла (ELF), номер версии, архитектуру системы (32-разрядная или 64-разрядная) и т.д.
e_typeТип файла, поскольку формат ELF поддерживает несколько типов
e_machineАрхитектура аппаратной платформы, для которой создан данный файл. В табл. 2.4 приведены возможные значения этого поля
e_versionНомер версии ELF-формата. Обычно определяется как EV_CURRENC (текущая), что означает последнюю версию
e_entryВиртуальный адрес, по которому системой будет передано управление после загрузки программы (точка входа)
e_phoffРасположение (смещение от начала файла) таблицы заголовков программы
е_shoffРасположение таблицы заголовков секций
е_ehsizeРазмер заголовка
e_phentsizeРазмер каждого заголовка программы
e_phnumЧисло заголовков программы
e_shentsizeРазмер каждого заголовка сегмента (секции)
е_shnumЧисло заголовков сегментов (секций)
e_shstrndxРасположение сегмента, содержащего таблицу строк

Таблица 2.4. Значения поля e_machine заголовка ELF-файла

ЗначениеАппаратная платформа
ЕМ_М32AT&T WE 32100
ЕМ_SPARCSun SPARC
ЕМ_386Intel 80386
ЕМ_68KMotorola 68000
EM_88KMotorola 88000
ЕМ_486Intel 80486
ЕМ_860Intel i860
ЕМ_MIPSMIPS RS3000 Big-Endian
EM_MIPS_RS3_LEMIPS RS3000 Little-Endian
EM_RS6000RS6000
EM_PA_RISCPA-RISC
EM_nCUBEnCUBE
EM_VPP500Fujitsu VPP500
EM_SPARC32PLUSSun SPARC 32+
Перейти на страницу:

Похожие книги