Операционные системы. Курс лекций



Компоновщики и загрузчики ОС. Форматы COFF (command object file format) и PE (portable executable). - часть 2


Важнейшим понятием в исполняемом модуле является относительный виртуальный адрес RVA. RVA является смещением какого-либо элемента модуля относительно базового адреса в памяти или относительно начала файла на диске.

Наименьшая часть объектного файла, которая подвергается перемещению – это секция. Можно рассматривать секцию как элемент COFF или PE модуля, который содержит однотипную информацию. Объектный модуль COFF начинается со структуры Image File Header. – основной заголовок – информация о типе процессора, время создания, количество секций.

Таблица секций – это массив структур Image Section Header, каждая из которых полностью описывает конкретную секцию: имя секции – физический адрес секции в модуле, размер секции и тип содержимого в секции. Кроме параметров содержимого секции в Image Section Header указывается наличие таблицы поправок для данной секции и таблицы номеров строк.

В объектном модуле COFF таблица поправок и таблица номеров строк хранятся для каждой секции внутри самой секции непосредственно после данных.

Таблица поправок представляет собой массив структур Image Relocation. Данные поправки или привязки основаны на использовании таблицы символов и используются компоновщиком для настройки связей.

Таблица номеров строк является массивом структур Image Line Number – ставит в соответствие одной строке программного кода источник ее RVA в исполняемом отображении. Таблица номеров строк является отладочной информацией.

После заголовка Image Section Header последовательно располагаются сами секции. После секции идет таблица символов, которая представляет собой массив структур Image Symbol. Каждая такая структура описывает один символ, которым может являться имя секции, имя процедуры, имя переменной, области памяти и т.д.

Элементы в таблице символов совершенно различны и имеют разные типы. Поправки или привязки основаны на использовании таблицы символов. Элемент таблицы символов, описывающий поправку, содержит номер секции элемента, к которому осуществляется привязка и его RVA.




Содержание  Назад  Вперед