[<<Previous Entry] [^^Up^^] [Next Entry>>] [Menu] [About The Guide]
 Формат файла a.out (COFF)
На 32-битовых машинах, файлы a.out, создаются ассемблером и редактором
связей в общем формате объектного файла (Common Object File Format -
COFF).
Объектный файл формата COFF состоит из заголовка файла, заголовка
системы UNIX, таблицы заголовков секций, настроечной информации,
номеров строк (необязательно), и таблицы символов. Их порядок приведен
ниже.
Заголовок файла
заголовок системы UNIX
заголовок секции 1
...
заголовок секции n
данные секции 1
...
данные секции n
настройка секции 1
...
настройка секции n
номера строк секции 1
...
номера строк секции n
таблица символов
таблица строк
Секция представляет собой наименьшую порцию объектного файла, которая
может перемещаться и обрабатываться как одно целое. По умолчанию
создаются три секции: .text, .data, .bss. Дополнительные секции
добавляются к секциям по умолчанию для множественных текстовых
сегментов, разделяемых сегментов данных, или сегментов,
специфицированных пользователем.
Заголовок файла содержит количество секций, временные отметки,
указатель на таблицу символов и другую информацию.
Заголовок системы UNIX содержит системный код файла (по умолчанию
восьмеричное 410 для разделяемого текста или 407 для совмещенных
текста и данных), размер текста, размер инициализированных данных,
размер неинициализированных данных, точку входа, базовые адреса текста
и данных.
Далее идет таблица заголовков секций. Для каждой секции определен
элемент, который содержит имя секции, физический и виртуальный адреса,
размер секции, указатель на исходные данные секции, указатель на точку
перемещения, указатель на номера строк и другую информацию.
Замечание: Секция .bss имеет размер и символы, которые ссылаются на
нее. Но в ней нет ни указателей на точку перемещения, ни номеров
строк, ни данных. Поэтому секция .bss имеет запись в таблице
заголовков секций, но больше не занимает места нигде в  COFF-файле.
Далее следуют секции начальных данных, состоящих из соответствующего
количества байт текста или данных. Файлы, созданные cc и as всегда
содержат три секции: .text (исполняемый код), .data
(инициализированные переменные) и .bss (неинициализированные
переменные).
Последние четыре составляющие формата COFF (настройка, номера строк,
таблица символов и таблица строк) могут отсутствовать, если программа
была собрана с опцией  -s редактора связи или если таблица символов и
биты настройки были удалены с помощью команды strip(1). Также
отметьте, что если не осталось неразрешенных ссылок после компоновки
программы, будет отсутствовать настроечная информация.
Секция номеров строк добавляется к объектному файлу только при
компиляции с опцией -g, для дальнейшего использования sdb(1).
Каждый вход в таблице символов содержит либо имя символа, если оно не
больше 8 знаков, либо смещение в таблице строк, где хранится строка
имени, а также значение символа, тип, класс памяти и другую
информацию. Команда nm(1) показывает таблицу символов объектных
файлов.
Таблица строк создается только при необходимости. Здесь сплошным
массивом хранятся имена символов длиннее восьми знаков, каждое
завершающееся нулевым байтом.
Замечание: Детальное описание COFF приводится в Руководстве по
средствам поддержки ОС UNIX+ System V.
Для просмотра различных частей общего объектного файла используются
процедуры доступа. Эти функции находятся в библиотеке libld.a и
перечислены в секции 3 Справочного руководства программиста ОС UNIX+
System V, а их краткое описание можно найти в ldfcn(4).