Формат объектного модуля (Intel)
Расширение имени файла | .omf , .obj |
---|---|
Разработано | Комитет по стандартам интерфейса инструментов |
Тип формата | Объектный файл |
Формат объектного модуля (OMF) — это объектного файла, формат используемый в основном для программного обеспечения, предназначенного для работы на Intel 80x86 микропроцессорах . Первоначально он был разработан Intel примерно в 1975–1977 годах для ISIS-II 8-битные 8080/8085 и ориентирован на процессоры . [1] [2] [3] [4] Этот вариант позже стал известен как OMF-80 . Как OMF-86 он был адаптирован для 16-битного процессора 8086 в 1978 году. [5]
Версия 4.0 OMF для семейства 8086 была выпущена в 1981 году под названием Relocatable Object Module Format . [6] [3] [4] и, пожалуй, наиболее известен пользователям DOS как файл .OBJ . Версии для 80286 ( OMF-286 ) [7] [8] и 32-битные процессоры 80386 ( OMF-386 ) [9] [10] [3] были введены в 1981 и 1985 годах соответственно. С тех пор он был стандартизирован Комитетом по стандартам интерфейса инструментов. [11] а также был расширен Microsoft [12] и IBM ( IBM-OMF ). Intel также адаптировала формат для микроконтроллера 8051 ( OMF-51). [13] и АОМФ ).
Формат файла [ править ]
Многие форматы объектных файлов состоят из набора таблиц, таких как таблица перемещения, которые либо хранятся в фиксированных позициях в файле, как формат a.out , либо указываются в заголовке, как формат ELF . «Разделы», код, область данных и т. д. хранятся в таких файлах как непрерывные области байтов.
Однако формат перемещаемого объектного модуля был разработан так, чтобы при связывании требовался минимум памяти, и состоит из серии записей, имеющих следующий формат:
Размер | Содержание |
---|---|
1 байт | Тип записи, например информация о переезде |
2 байта | Длина данных ( N +1) |
N байт | Данные (варьируется в зависимости от типа записи) |
1 байт | Контрольная сумма или 0 |
Существует большое разнообразие типов записей благодаря объединению вариантов OMF от нескольких поставщиков, а также добавлению таких функций, как 32-битный код и динамическое связывание. Это важные типы записей:
- КОММЕНТАРИЙ - (88h) Комментарий, который также может содержать управляющую информацию.
- EXTDEF - (8Ch) Определяет внешние ссылки.
- PUBDEF – (90h/91h) Идентифицирует внешние символы в этом модуле.
- SEGDEF - (98h/99h) Идентифицирует сегменты.
- GRPDEF - (9Ah) Идентифицирует группы сегментов, например MS-DOS.
DGROUP
- FIXUPP - (9Ch/9Dh) Исправление или перемещение записей.
- LEDATA - (A0h/A1h) Содержит текст кода или раздела данных.
- COMDEF - (B0h) Неинициализированные общие данные
- COMDAT - (C2h/C3h) Инициализированные общие данные
- MODEND - (8Ah/8Bh) Указывает конец модуля.
В файле нет заголовка, содержащего файловые смещения, например указателя на таблицу символов; компоновщик должен полностью проанализировать объектный файл , чтобы извлечь всю информацию.
В формате OMF данные одного раздела не обязательно хранятся в виде последовательных байтов в файле, вместо этого они могут быть представлены несколькими записями. В спецификации формата файла (версия 1.1) сказано, что это необходимо сделать для разделов размером более 1 КиБ. Записи, содержащие информацию о перемещении (исправления), должны храниться сразу после записей данных раздела, к которому они относятся, чтобы данные раздела и информация о перемещении «перемешивались» в файле.
Формат файла предоставляет специальные записи (LIDATA), которые позволяют сжимать повторяющиеся последовательности данных в объектном файле. Он также предоставляет возможность сохранить имя символа точки входа последующего исполняемого файла в одном объектном файле.
Формат файла также можно использовать как формат файла библиотеки .
Используйте [ править ]
Формат файла является наиболее важным форматом объектного файла в DOS, 16-битной Windows , а также 16- и 32-битной OS/2 . [14] [15]
Лишь немногие инструментальные цепочки используют 32-битную версию формата OMF. Например, набор инструментов Watcom C позволяет генерировать код для целей, использующих 32-битную сегментированную структуру памяти; Iron Spring PL/I может генерировать код для 32-битных плоских схем памяти OS/2.
Компилятор Embarcadero Delphi использовал этот формат при создании obj
файлы для С++. Это был единственный формат объектных файлов, который можно было связать с программой или модулем, написанным на Object Pascal до версии XE2 Delphi, в которой появилась поддержка формата COFF вместе с 64-битной целевой версией Windows.
См. также [ править ]
- Общий формат объектных файлов (COFF)
- Исполняемый и связываемый формат (ELF)
- а.аут
- Объектный файл
- Формат объектного модуля (VME) (OMF, используемый ICL VME)
- Формат объектного модуля (Apple) (OMF, используемый ORCA/ Apple IIGS )
Ссылки [ править ]
- ^ Форматы абсолютных объектных файлов MCS 80/85 (PDF) (Техническая спецификация). Санта-Клара, Калифорния, США: Корпорация Intel . 1977 г. Номер изделия 9800183Б. Архивировано из оригинала (PDF) 27 июня 2017 г. (16 страниц)
- ^ Форматы перемещаемых объектных модулей MCS 80/85 (PDF) (Техническая спецификация). Санта-Клара, Калифорния, США: Корпорация Intel . Март 1981 г. Номер изделия 121747-001. А33С/381/С00 ИП. Архивировано (PDF) из оригинала 25 ноября 2023 г. Проверено 25 ноября 2023 г. (42 страницы)
- ↑ Перейти обратно: Перейти обратно: а б с Бергетт, Кеннет «Кен» (10 ноября 2017 г.). «Разработка операционной системы Intel ISIS — интервью с Кеном Бергеттом» . Архивировано из оригинала 24 ноября 2023 г. Проверено 25 ноября 2023 г.
Мой хороший друг Брюс получил работу по разработке формата объектного модуля (OMF) для 8080 и будущего 8086 . Эта работа просуществовала долгие годы, поскольку MS-DOS использовала ее с небольшими изменениями или вообще без них […] Это была хорошая работа, и в 1985 году она была обновлена для поддержки режима 32-битного плоского адреса 80386 . […] OMF предоставил нам хороший план разработки компоновщика, который связывал вместе объектные модули, и локатора, который обрабатывал перемещаемый код в фиксированный образ памяти с определенной точкой входа, поскольку именно так ISIS обрабатывался . загрузочные модули. Локатор также был создан для обеспечения отображения связанного модуля в набор образов EPROM , чтобы их можно было запрограммировать с помощью prom-burner .
[1] [2] - ↑ Перейти обратно: Перейти обратно: а б Некасек, Михал (25 июля 2020 г.) [09 июля 2020 г.]. «Сколько лет OMF?» . Музей OS/2 . Архивировано из оригинала 25 ноября 2023 г. Проверено 25 ноября 2023 г.
- ^ Внешняя спецификация продукта, форматы объектных модулей 8086 . Корпорация Интел . 19 декабря 1978 г.
- ^ «Форматы перемещаемых объектных модулей 8086» (PDF) . Версия 4.0. Санта-Клара, Калифорния, США: Корпорация Intel . Ноябрь 1981 г. Номер продукта 121748-001. ковчег:/13960/t07w7pz4b. Архивировано (PDF) из оригинала 25 ноября 2023 г. Проверено 8 февраля 2020 г. [3] [4] [5] (124 страницы)
- ^ Руководство пользователя для сборщика систем iAPX 286 (PDF) . Санта-Клара, Калифорния, США: Корпорация Intel . Сентябрь 1981 г. Приказ № 121711-001. Архивировано (PDF) из оригинала 26 ноября 2023 г. Проверено 26 ноября 2023 г. [6] (90 страниц)
- ^ «Формат объектного модуля iAPX 286». Руководство для разработчиков операционных систем iAPX 286 (PDF) . Корпорация Интел . 1983. стр. 11–10–11–11. Номер заказа 121960-001. Архивировано (PDF) из оригинала 26 ноября 2023 г. Проверено 26 ноября 2023 г. (2 из 251 страниц)
- ^ Спецификация 386 Формат объектных модулей . Корпорация Интел . 1991 [1990]. Номер заказа 482991-002.
- ^ Простые загрузочные файлы в формате 386 объектных модулей . Корпорация Интел . 1991 [1990]. Номер заказа 483164-001.
- ^ «Спецификация формата перемещаемого объектного модуля (OMF) стандартов инструментального интерфейса (TIS)» (PDF) . Версия 1.1. Комитет ТИС / Unix International . Май 1995 г. [1993, 1992]. Архивировано из оригинала (PDF) 7 февраля 2020 г. Проверено 7 февраля 2020 г. [7] [8] (87 страниц)
- ^ «Формат файла Microsoft OBJ» . ФайлФормат.Информация . Архивировано из оригинала 25 ноября 2023 г. Проверено 26 ноября 2023 г.
- ^ Внешняя спецификация продукта для формата объектного модуля MCS-51 (PDF) . Версия 5.0 Редакция A. Корпорация Intel . 5 сентября 1982 г. Номер продукта 9800183B. Номер Центра контроля документации 481984. Архивировано (PDF) из оригинала 25 ноября 2023 г. (24 страницы) (Примечание. Это версия, поставляемая с Intel RL51 2.0 и PL/M-51 1.0. Существовала более ранняя версия X207, датированная 12 апреля 1982 г.)
- ^ Формат 16/32-битного объектного модуля IBM OS/2 (OMF) и формат линейного исполняемого модуля (LX) (PDF) . Версия 8. Бока-Ратон, Флорида, США: IBM Corporation . 30 июня 1994 г. [1991, 1993]. Архивировано (PDF) из оригинала 26 ноября 2023 г. Проверено 26 ноября 2023 г. (v+87 страниц)
- ^ Формат 16/32-битного объектного модуля IBM OS/2 (OMF) и формат линейного исполняемого модуля (LX) . Версия/Редакция 10. Бока-Ратон, Флорида, США: Корпорация IBM . 9 октября 1996 г. [1991]. Архивировано из оригинала 26 ноября 2023 г. Проверено 26 ноября 2023 г. [9] (vi+95 страниц)
Дальнейшее чтение [ править ]
- Левин, Джон Р. (2000) [октябрь 1999 г.]. «Глава 3: Объектные файлы» . Линкеры и загрузчики . Серия Моргана Кауфмана по разработке программного обеспечения и программированию (1-е изд.). Сан-Франциско, Калифорния, США: Морган Кауфманн . ISBN 1-55860-496-0 . OCLC 42413382 . Архивировано из оригинала 25 января 2013 г. Проверено 12 января 2020 г. Код: [10] [11] Исправления: [12]