Common Object File Format (COFF) — формат исполняемых файлов, файлов объектного кода и динамических библиотек. Формат появился в системе Unix System V, заменив прежний a.out. Послужил основой для расширенных спецификаций, таких как XCOFF и ECOFF, и был впоследствии заменён форматом ELF. Продолжает использоваться в некоторых UNIX-подобных операционных системах, в Microsoft Windows и других системах.
Формат файла
Файл формата COFF включает в себя заголовок файла, дополнительный заголовок, таблицу секций и одну или несколько секций кода и данных.
Заголовок файла COFF
Смещение |
Длина |
Поле |
Описание
|
0 |
2 |
f_magic |
Идентификатор типа машины, на которой файл может исполняться
|
2 |
2 |
f_nscns |
Количество секций
|
4 |
4 |
f_timdat |
Младшие 32 бита количества секунд, прошедших с 0:00 1 января 1970 г. в момент создания файла
|
8 |
4 |
f_symptr |
Положение в файле таблицы символов (используется для отладки)
|
12 |
4 |
f_nsyms |
Количество элементов в таблице символов
|
16 |
2 |
f_opthdr |
Размер дополнительного заголовка, для объектных файлов равен нулю
|
18 |
2 |
f_flags |
Флаги, указывающие атрибуты файла
|
Дополнительный заголовок файла содержит информацию, необходимую для загрузчика. Размер заголовка может быть разным, в зависимости от системы и версии.
Дополнительный заголовок (для MIPS)
Смещение |
Длина |
Поле |
Описание
|
0 |
2 |
magic |
Тип файла
|
2 |
2 |
vstamp |
Версия
|
4 |
4 |
tsize |
Суммарный размер всех секций, содержащих исполняемый код
|
8 |
4 |
dsize |
Суммарный размер всех секций, содержащих инициализированные данные
|
12 |
4 |
bsize |
Суммарный размер всех секций, содержащих неинициализированные данные
|
16 |
4 |
entry |
Адрес точки входа в программу (0 — если не используется)
|
20 |
4 |
text_start |
Адрес загрузки кода
|
24 |
4 |
data_start |
Адрес загрузки инициализированных данных
|
28 |
4 |
bss_start |
Адрес размещения неинициализированных данных
|
32 |
4 |
gprmask |
|
36 |
4 |
cprmas |
|
40 |
4 |
gp_value |
|
Таблица секций находится непосредственно за дополнительным заголовком. Каждая строка в таблице является заголовком соответствующей секции.
Строка таблицы секций
Смещение |
Длина |
Поле |
Описание
|
0 |
8 |
s_name |
Имя секции
|
8 |
4 |
s_paddr |
Физический адрес
|
12 |
4 |
s_vaddr |
Виртуальный адрес
|
16 |
4 |
s_size |
Размер секции
|
20 |
4 |
s_scnpt |
Положение секции в файле
|
28 |
4 |
s_relptr |
Положение в файле таблицы настройки адресов секции
|
32 |
4 |
s_lnnoptr |
|
36 |
2 |
s_nreloc |
Количество элементов в таблице настройки адресов
|
38 |
2 |
s_nlnno |
|
40 |
4 |
s_flags |
Флаги
|
Примечания
Ссылки