ПАМЯТЬ
Эта статья нуждается в дополнительных цитатах для проверки . ( март 2010 г. ) |
Расширение имени файла | |
---|---|
Тип интернет-СМИ | приложение/x-coff, приложение/x-coffexec |
Магическое число | |
Разработано | Корпорация AT&T |
Тип формата | Двоичные , исполняемые файлы , объекты , общие библиотеки |
Распространено на | XCOFF , ECOFF , портативный исполняемый файл , исполняемый и связываемый формат |
Общий формат объектных файлов ( COFF ) — это формат , исполняемых файлов объектного кода и общих библиотек, компьютерных файлов используемых в системах Unix . Он был представлен в Unix System V , заменил ранее использовавшийся формат a.out и лег в основу расширенных спецификаций, таких как XCOFF и ECOFF , прежде чем был в значительной степени заменен ELF , представленным в SVR4 . COFF и его варианты продолжают использоваться в некоторых Unix-подобных системах, в Microsoft Windows ( Portable Executable ), в UEFI средах и в некоторых встроенных системах разработки.
История [ править ]
Исходный формат объектного файла Unix a.out не может адекватно поддерживать общие библиотеки , идентификацию иностранных форматов, [ нужна ссылка ] или явная привязка адресов. [ нужна ссылка ] Поскольку разработка Unix-подобных систем продолжалась как внутри, так и за пределами AT&T , появлялись различные решения этих и других проблем.
COFF был представлен в 1983 году в компании AT&T UNIX System V для платформ, отличных от VAX, 32-битных таких как 3B20 . [ нужна ссылка ] Усовершенствования по сравнению с существующим форматом a.out AT&T включали произвольные разделы, явные объявления процессоров и явную привязку адресов.
Однако конструкция COFF была слишком ограничена и не полностью определена: существовало ограничение на максимальное количество разделов, ограничение на длину имен разделов, включались исходные файлы, а символическая отладочная информация не могла поддерживать языки реального мира, такие как как C , и гораздо меньше новых языков, таких как C++ , или новых процессоров. В результате все реальные реализации COFF неизбежно нарушали стандарт. Это привело к многочисленным расширениям COFF. IBM использовала формат XCOFF в AIX ; DEC , SGI и другие использовали ECOFF ; и многочисленные порты SysV и цепочки инструментов, предназначенные для разработки встраиваемых систем, каждый из которых создал свои собственные, несовместимые варианты.
С выпуском SVR4 AT&T заменила COFF на ELF .
Хотя расширенные версии COFF продолжают использоваться для некоторых Unix и Unix-подобных платформ, в первую очередь во встроенных системах , возможно, наиболее широкое использование формата COFF сегодня находится в Microsoft формате Portable Executable (PE). разработанный для Windows NT Формат PE (иногда обозначаемый как PE/COFF), , использует заголовок COFF для объектных файлов и в качестве компонента заголовка PE для исполняемых файлов. [3]
Особенности [ править ]
Основным улучшением 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 года, не могут быть сохранены в этом формате, что приводит к возникновению проблемы 2038 года . [4] : 11–4
См. также [ править ]
Ссылки [ править ]
- ^ «Справочник по LIB (Руководство программиста по встроенному Visual C++)» . msdn.microsoft.com . Архивировано из оригинала 25 августа 2003 г. Проверено 4 февраля 2021 г.
- ^ «Структура IMAGE_FILE_HEADER (winnt.h)» . 12 мая 2018 г. Проверено 22 декабря 2023 г.
- ^ Корпорация Microsoft, 2006b.
- ^ «11 Общий формат объектных файлов (COFF)». Руководство программиста UNIX System V/386, выпуск 3.2, том II (PDF) . Прентис-Холл . 1989. ISBN 0-13-944885-3 .
Дальнейшее чтение [ править ]
- Спецификация MIPS COFF
- Гирсис, Гинтарас (1988), Понимание и использование COFF , O'Reilly and Associates, ISBN 0-937175-31-5
- Microsoft Corporation (2006b), Common Object File Format (COFF) (редакция 4.1), заархивировано из оригинала 16 декабря 2006 г. , получено 2 июня 2007 г.
- «Краткая история форматов объектных файлов TI» . Архивировано из оригинала 26 ноября 2023 г.
- «Общий формат объектных файлов» (PDF) . Техасские инструменты .