COFF

редактировать
COFF
Расширение имени файла нет,.o,.obj
РазработаноATT Corporation
Тип форматаДвоичный, исполняемый, объект, разделяемые библиотеки
Расширен доXCOFF, ECOFF, Portable Executable

Common Object File Format (COFF ) - это формат для исполняемого файла, объектный код и разделяемая библиотека компьютерные файлы, используемые в системах Unix. Он был введен в Unix System V, заменил ранее использовавшийся формат a.out и лег в основу расширенных спецификаций, таких как XCOFF и ECOFF., прежде чем быть в значительной степени замененным на ELF, представил с SVR4. COFF и его варианты продолжают использоваться в некоторых Unix-подобных системах, в Microsoft Windows (PE Format ), в EFI средах и в некоторых встроенных системах разработки.

Содержание

  • 1 История
  • 2 Возможности
    • 2.1 Символьная отладочная информация
    • 2.2 Относительный виртуальный адрес
  • 3 Проблемы
  • 4 См. Также
  • 5 Примечания
  • 6 Ссылки
  • 7 Внешние ссылки

История

Исходный формат объектного файла Unix a.out не может адекватно поддерживать разделяемые библиотеки, идентификацию внешнего формата или явную адресная связь. Поскольку разработка Unix-подобных систем продолжалась как внутри, так и за пределами ATT, появлялись различные решения этих и других проблем.

COFF был представлен в 1983 году в UNIX System V компании ATT для 32-битных платформ, отличных от VAX, таких как 3B20. Усовершенствования по сравнению с существующим форматом ATT a.out включают произвольные разделы, явные объявления процессоров и явную привязку адресов.

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

С выпуском SVR4 компания ATT заменила COFF на ELF.

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

Возможности

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

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

Символьная отладочная информация 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 г. не могут быть сохранены в этом формате.

См. Также

Примечания

  1. ^Microsoft Corporation 2006b

Ссылки

Внешние ссылки

Последняя правка сделана 2021-05-13 11:33:20
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте