COFF

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
COFF
Расширение .o или .obj
MIME-тип application/x-coff[1] и application/x-coffexec[2]
Тип формата исполняемый, объектный, динамическая библиотека
Развит в XCOFF, ECOFF, Portable Executable

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 Флаги

Ссылки[править | править код]

  1. https://github.com/file/file/blob/FILE5_45/magic/Magdir/coff#L50
  2. https://github.com/file/file/blob/FILE5_45/magic/Magdir/coff#L55