Файл объекта - Object file

An объектный файл это компьютерный файл, содержащий объектный код, то есть, Машинный код выход ассемблер или же компилятор. Объектный код обычно перемещаемый, и обычно не напрямую исполняемый файл. Существуют различные форматы объектных файлов, и один и тот же машинный код может быть упакован в разные форматы объектных файлов. An объектный файл может также работать как общая библиотека.

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

Термин «объектная программа» появился как минимум в 1950-х годах:

Термин в автоматическом программировании для программы на машинном языке, созданной машиной путем перевода исходной программы, написанной программистом, на язык, похожий на алгебраическую нотацию.[1]

Программист генерирует объектный код с компилятор. Например, под Linux то Коллекция компиляторов GNU компилятор сгенерирует файлы с расширением .o. На ПК у них есть расширение .obj. Затем компоновщик используется для объединения объектного кода в одну исполняемую программу или библиотеку, при необходимости извлекая предварительно скомпилированные системные библиотеки. Напротив, скрипты (Python или JavaScript) интерпретируются и Java (язык программирования) программы компилируются в файлы классов с байтовым кодом.

Форматы объектных файлов

Есть много различных форматов объектных файлов; изначально у каждого типа компьютера был свой уникальный формат, но с появлением Unix и другие портативный операционные системы, некоторые форматы, например COFF и ELF, были определены и используются в различных типах систем. Один и тот же формат файла может использоваться как компоновщик вход и выход, и, следовательно, как библиотека и исполняемый файл формат файла.[2]:стр.16 Некоторые форматы могут содержать машинный код для разных процессоров, причем правильный код выбирается операционной системой при загрузке программы.[3]

Некоторые системы делают различие между файлами, которые являются непосредственно исполняемыми, и файлами, которые требуют обработки компоновщиком. Например, OS / 360 и последователи назовите первый формат модуль нагрузки а второй объектный модуль. В этом случае файлы имеют совершенно разные форматы.

Дизайн и / или выбор формата объектного файла является ключевой частью общего дизайна системы. Это влияет на производительность компоновщика и, следовательно, программист оборот во время разработки программы. Если формат используется для исполняемых файлов, дизайн также влияет на время, необходимое программам для начать бежать, и, следовательно, ответная реакция для пользователей.

Абсолютные объектные файлы

Многие ранние компьютеры или небольшие микрокомпьютеры поддерживают только абсолютный объектный формат. Программы не могут быть перемещены; они должны быть собраны или скомпилированы для выполнения по конкретным заранее определенным адресам. Файл не содержит информации о перемещении или привязке. Эти файлы могут быть загружены в память для чтения / записи или сохранены в только для чтения памяти. Например, Motorola 6800 МИКБУГ monitor содержит процедуру чтения абсолютного объектного файла (Формат SREC ) из бумажная лента.[4] ДОС COM файлы являются более свежим примером абсолютных объектных файлов.[5]

Сегментация

Большинство форматов объектных файлов структурированы как отдельные разделы данных, каждый из которых содержит определенный тип данных. Эти разделы известны как «сегменты» из-за термина «сегмент памяти ", который ранее был распространенной формой управление памятью. Когда программа загружается в память погрузчик, загрузчик выделяет программе различные области памяти. Некоторые из этих областей соответствуют сегментам объектного файла и поэтому обычно известны под одними и теми же именами. Другие, например стек, существуют только во время выполнения. В некоторых случаях, переезд выполняется загрузчиком (или компоновщиком) для указания фактических адресов памяти. Однако для многих программ или архитектур в перемещении нет необходимости из-за того, что блок управления памятью или по позиционно-независимый код. В некоторых системах сегменты объектного файла затем могут быть скопированы (выгружены) в память и выполнены без необходимости дальнейшей обработки. В этих системах это можно сделать лениво, то есть только тогда, когда на сегменты ссылаются во время выполнения, например, через файл с отображением памяти поддерживаются объектным файлом.

Типы данных, поддерживаемые типичными форматами объектных файлов:[6]

Сегменты в разных объектных файлах могут быть объединены компоновщиком в соответствии с правилами, указанными при определении сегментов. Существуют соглашения для сегментов, совместно используемых объектными файлами; например, в ДОС Существуют разные модели памяти которые определяют имена специальных сегментов и то, могут ли они быть объединены.[7]

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

В Проект GNU с Библиотека дескрипторов двоичных файлов (Библиотека BFD) предоставляет общий API для работы с объектными файлами в различных форматах.

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

  1. ^ Врубель, маршал Х. (1959). Учебник по программированию для цифровых компьютеров. Нью-Йорк: Макгроу-Хилл. п. 222. Получено 31 июля, 2020.
  2. ^ Корпорация IBM (1973). Редактор и загрузчик связей с ОС IBM (PDF). Получено 2012-08-06.
  3. ^ «FatELF: универсальные двоичные файлы для Linux». Получено 2 августа, 2020.
  4. ^ Уайлс, Майк; Феликс, Андре. MCM6830L7 ПЗУ MIKBUG / MINIBUG (PDF). Motorola Semiconductor Products, Inc. Получено 31 июля, 2020.
  5. ^ Godse, D.A .; Годсе, А.П. (2008). Микропроцессор - I (Первое изд.). Пуна: Технические публикации. п. 3-15. ISBN  978-81-8431-355-0.
  6. ^ Мауэрер, Вольфганг (2010). Профессиональная архитектура ядра Linux. Джон Вили и сыновья. п. Приложение E: Двоичный формат ELF. ISBN  978-0-470-34343-2. Получено 1 августа, 2020.
  7. ^ Ирвин, Кип Р. (1993), Язык ассемблера для IBM-PC (2-е изд.), Нью-Йорк: Macmillan, ISBN  0-02-359651-1

дальнейшее чтение