COFF - COFF

COFF
Расширение имени файла
никто, .o, .obj
РазработанКорпорация AT&T
Тип форматаДвоичный, исполняемый файл, объект, общие библиотеки
Расширен доXCOFF, ЭКОФФ, Переносимый исполняемый файл

В Общий формат объектного файла (COFF) это формат за исполняемый файл, объектный код, и общая библиотека компьютерные файлы используется на Unix системы. Он был введен в Unix System V, заменил ранее использованный а. выход формат и легли в основу расширенных спецификаций, таких как XCOFF и ЭКОФФ, прежде чем быть в значительной степени замененным на ELF, представленный с SVR4. COFF и его варианты продолжают использоваться на некоторых Unix-подобный системы, на Майкрософт Виндоус (Формат PE ), в EFI средах и в некоторых встроенных системах разработки.

История

Исходный формат объектного файла Unix а. выход не может адекватно поддерживать общие библиотеки, идентификация иностранного формата[нужна цитата ], или явная привязка адреса[нужна цитата ]. По мере развития Unix-подобный Системы продолжали работать как внутри, так и за пределами AT&T, появились различные решения этих и других проблем.

COFF был представлен в 1983 году в AT&T. Система UNIX V для 32-битных платформ, отличных от VAX, таких как 3B20[нужна цитата ]. Улучшения по сравнению с существующим AT&T а. выход формат включал произвольные разделы, явные объявления процессоров и явную привязку адресов.

Однако дизайн COFF был как слишком ограниченным, так и не полностью определенным: существовало ограничение на максимальное количество разделов, ограничение на длину имен разделов, включенные исходные файлы, а символьная отладочная информация была неспособна поддерживать языки реального мира, такие как в качестве C и тем более новые языки, такие как C ++, или новые процессоры. В результате все реализации COFF в реальном мире неизбежно нарушали стандарт. Это привело к многочисленным расширениям COFF. IBM использовал XCOFF формат в AIX; DEC, SGI и другие использовали ЭКОФФ; и многочисленные порты SysV и цепочки инструментов, предназначенные для разработки встраиваемых систем, создают свои собственные несовместимые варианты.

С выпуском SVR4 AT&T заменила COFF на ELF.

В то время как расширенные версии COFF продолжают использоваться для некоторых Unix-подобных платформ, в первую очередь во встроенных системах, возможно, наиболее распространенным сегодня форматом COFF является Microsoft с Переносимый исполняемый файл (PE) формат. Разработано для Windows NT формат PE (иногда обозначаемый как PE / COFF) использует заголовок COFF для объектных файлов и в качестве компонента заголовка PE для исполняемых файлов.[1]

Функции

Основное улучшение COFF по сравнению с а. выход было введение нескольких именованных разделов в объектном файле. В разных объектных файлах может быть разное количество и типы разделов.

Символьная отладочная информация

Символьная отладочная информация COFF состоит из символьных (строковых) имен программных функций и переменных, а также информации о номерах строк, используемых для установки точек останова и отслеживания выполнения.

Символические имена хранятся в таблице символов COFF. Каждая запись таблицы символов включает имя, класс хранения, тип, значение и номер раздела. Краткие имена (8 или менее символов) хранятся непосредственно в таблице символов; более длинные имена сохраняются как смещение в таблице строк в конце объекта COFF.

Классы хранения описывают типовой объект, который представляет символ, и могут включать внешние переменные (C_EXT), автоматические (стековые) переменные (C_AUTO), регистровые переменные (C_REG), функции (C_FCN) и многие другие. Тип символа описывает интерпретацию значения объекта символа и включает значения для всех C типы данных.

При компиляции с соответствующими параметрами объектный файл COFF будет содержать информацию о номерах строк для каждой возможной точки останова в текстовой части объектного файла. Информация о номере строки принимает две формы: в первой для каждой возможной точки останова в коде запись в таблице номеров строк записывает адрес и соответствующий ему номер строки. Во второй форме запись идентифицирует запись таблицы символов, представляющую начало функции, позволяя установить точку останова с использованием имени функции.

Обратите внимание, что COFF не может представлять номера строк или символы отладки для включенного источника, как в случае с файлами заголовков, что делает отладочную информацию COFF практически бесполезной без несовместимых расширений.

Относительный виртуальный адрес

Когда создается файл COFF, обычно неизвестно, куда он будет загружен. В виртуальный адрес где будет загружен первый байт файла, называется изображением базовый адрес. Остальная часть файла не обязательно загружается в непрерывный блок, но в разные разделы.

Относительные виртуальные адреса (RVA) не следует путать со стандартными виртуальными адресами. А относительный виртуальный адрес это виртуальный адрес объекта из файла после его загрузки в память за вычетом базового адреса файла изображения. Если бы файл отображался буквально с диска в память, RVA было бы таким же, как у смещения в файле, но на самом деле это довольно необычно.

Обратите внимание, что термин RVA используется только с объектами в файле изображения. После загрузки в память добавляется базовый адрес изображения и используются обычные виртуальные машины.

Проблемы

Заголовок файла COFF хранит дату и время создания объектного файла в виде 32-битного двоичного целого числа, представляющего количество секунд с момента создания Эпоха Unix, 1 января 1970 г., 00:00:00 UTC. Даты, наступающие после 19 января 2038 г. не могут быть сохранены в этом формате.

Смотрите также

Примечания

Рекомендации

  • MIPS COFF Spec
  • Гирцис, Гинтарас (1988), Понимание и использование COFF, O'Reilly and Associates, ISBN  0-937175-31-5
  • Корпорация Microsoft (2006b), Общий формат объектного файла (COFF) (Редакция 4.1 ред.), Заархивировано с оригинал на 2006-12-16, получено 2007-06-02

внешняя ссылка