COFF
Common Object File Format (COFF) — формат исполняемых файлов, файлов объектного кода и динамических библиотек. Формат появился в системе Unix System V, заменив прежний a.out. Послужил основой для расширенных спецификаций, таких как XCOFF и ECOFF, и был впоследствии заменён форматом ELF. Продолжает использоваться в некоторых UNIX-подобных операционных системах, в Microsoft Windows и других системах.
COFF | |
---|---|
Расширение |
.o или .obj |
Тип формата | исполняемый, объектный, динамическая библиотека |
Развит в | XCOFF, ECOFF, Portable Executable |
Формат файла
Файл формата 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 | Флаги, указывающие атрибуты файла |
Дополнительный заголовок файла содержит информацию, необходимую для загрузчика. Размер заголовка может быть разным, в зависимости от системы и версии.
Смещение | Длина | Поле | Описание |
---|---|---|---|
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 | Флаги |