Книга: Операционная система UNIX
Формат COFF
Формат COFF
На рис. 2.5 приведена структура исполняемого файла формата COFF. Исполняемый файл содержит два основных заголовка — заголовок COFF и стандартный заголовок системы UNIX — a.out. Далее следуют заголовки разделов и сами разделы файла, в которых хранятся инструкции и данные программы. Наконец, в файле также хранится символьная информация, необходимая для отладки.
Рис. 2.5. Структура исполняемого файла в формате COFF
В файле находятся только инициализированные данные. Поскольку неинициализированные данные всегда заполняются нулями при загрузке программы на выполнение, для них необходимо хранить только размер и расположение в памяти.
Символьная информация состоит из таблицы символов (symbol table) и таблицы строк (string table). В первой таблице хранятся символы, их адреса и типы. Например, мы можем определить, что символ locptr
является указателем и его виртуальный адрес равен 0x7feh0. Далее, используя этот адрес, мы можем выяснить значение символа для выполняющегося процесса. Записи таблицы символов имеют фиксированный размер. Если длина символа превышает восемь знаков, его имя хранится во второй таблице — таблице строк. Обычно обе эти таблицы присутствуют в объектных и исполняемых файлах, если они явно не удалены, например, командой strip(1).
Как и в случае ELF-файла, заголовок содержит общую информацию, позволяющую определить местоположение остальных компонентов (табл. 2.5).
Таблица 2.5. Поля заголовка COFF-файла
Поле | Описание |
---|---|
f_magic |
Аппаратная платформа, для которой создан файл |
f_nscns |
Количество разделов в файле |
f_timdat |
Время и дата создания файла |
f_symptr |
Расположение таблицы символов в файле |
f_nsyms |
Количество записей в таблице символов |
f_opthdr |
Размер заголовка |
f_flags |
Флаги, указывающие на тип файла, присутствие символьной информации и т.д. |
Заголовок COFF присутствует в исполняемых файлах, промежуточных объектных файлах и библиотечных архивах. Каждый исполняемый файл кроме заголовка COFF содержит заголовок a.out, хранящий информацию, необходимую ядру системы для запуска программы[16] (табл. 2.6).
Таблица 2.6. Поля заголовка a.out
Поле | Описание |
---|---|
vstamp |
Номер версии заголовка |
tsize |
Размер раздела инструкций (text) |
dsize |
Размер инициализированных данных (data) |
bsize |
Размер неинициализированных данных (bss) |
entry |
Точка входа программы |
text_start |
Адрес в начала сегмента инструкций виртуальной памяти |
data_start |
Адрес в начала сегмента данных виртуальной памяти |
Все файлы формата COFF имеют один или более разделов, каждый из которых описывается своим заголовком. В заголовке хранится имя раздела (.text, .data, .bss или любое другое, установленное соответствующей директивой ассемблера), размер раздела, его расположение в файле и виртуальной адрес после запуска программы на выполнение. Заголовки разделов следуют сразу за заголовком файла.
Таблицы символов и строк являются основой системы отладки. Символом является любая переменная, имя функции или метка, определенные в программе.
Каждая запись в таблице символов хранит имя символа, его виртуальный адрес, номер раздела, в котором определен символ, тип, класс хранения (автоматический, регистровый и т.д.). Если имя символа занимает больше восьми байт, то оно хранится в таблице строк. В этом случае в поле имени символа указывается смещение имени символа в таблице строк.
С помощью символьной информации можно определить виртуальный адрес некоторого символа. Одним из очевидных применений этой возможности является использование символьной информации в программах- отладчиках. Эта возможность используется некоторыми программами, например, утилитой ps(1), отображающей состояние процессов в системе.
- Форматы исполняемых файлов
- Форматы лид-магнитов
- 1.1. Информатика. Предмет информатики. Основные задачи информатики
- Определение пользовательского формата числовых данных
- Информатика: аппаратные средства персонального компьютера
- Выбор правильного формата для вашего видео на YouTube
- Как в документ Microsoft Word вставить текст, в котором отсутствует форматирование?
- Трюки с форматированием
- Форматы аудиофайлов
- Форматы электронных книг
- Время показывается в 12-часовом формате, а мне привычнее 24-часовой. Как это изменить?
- Текстовые форматы и кодировки, или Почему иногда вместо текста я вижу абракадабру?