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 включает в себя заголовок файла, дополнительный заголовок, таблицу секций и одну или несколько секций кода и данных.
| Смещение | Длина | Поле | Описание |
|---|---|---|---|
| 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 | Флаги |