Jump to content

Объектный файл

Объектный файл — это файл, который содержит машинный код или байт-код , а также другие данные и метаданные , сгенерированные компилятором или ассемблером из исходного кода в процессе компиляции или сборки. Генерируемый машинный код известен как объектный код .

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

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

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

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

Компоновщик . используется для объединения объектного кода в одну исполняемую программу или библиотеку, при необходимости извлекая предварительно скомпилированные системные библиотеки

Форматы объектных файлов [ править ]

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

Некоторые системы проводят различие между форматами, которые являются непосредственно исполняемыми, и форматами, требующими обработки компоновщиком . Например, в OS/360 и последующих версиях первый формат называется загрузочным модулем , а второй — объектным модулем . В этом случае файлы имеют совершенно разные форматы. [2] DOS и Windows также имеют разные форматы файлов для исполняемых файлов и объектных файлов, например Portable Executable для исполняемых файлов и COFF для объектных файлов в 32-битной и 64-битной Windows.

Unix и Unix-подобные системы использовали один и тот же формат для исполняемых и объектных файлов, начиная с исходного формата a.out . Некоторые форматы могут содержать машинный код для разных процессоров, правильный из которых выбирается операционной системой при загрузке программы. [3] [4]

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

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

Абсолютные файлы [ править ]

Многие ранние компьютеры или небольшие микрокомпьютеры поддерживали только абсолютный формат объекта. Программы не подлежат перемещению; их необходимо ассемблировать или скомпилировать для выполнения по определенным, заранее определенным адресам. Файл не содержит информации о перемещении или связывании. Эти файлы могут быть загружены в память для чтения/записи или сохранены в постоянной памяти . Например, монитор Motorola 6800 MIKBUG содержит процедуру чтения абсолютного объектного файла ( формат SREC ) с бумажной ленты . [5] DOS COM-файлы являются более поздним примером абсолютных объектных файлов. [6]

Сегментация [ править ]

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

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

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

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

См. также [ править ]

Ссылки [ править ]

  1. ^ Врубель, маршал Х. (1959). Букварь программирования для цифровых компьютеров . Нью-Йорк, США: МакГроу-Хилл . п. 222 . Проверено 31 июля 2020 г.
  2. ^ Редактор и загрузчик IBM OS Linkage (PDF) . Корпорация IBM . 1973. с. 16 . Проверено 6 августа 2012 г.
  3. ^ «Универсальные двоичные файлы и 32-битные/64-битные двоичные файлы PowerPC» . Справочник по форматам файлов OS X ABI Mach-O . Apple Inc. , 04 февраля 2009 г. [2003 г.]. Архивировано из оригинала 4 сентября 2014 г.
  4. ^ «FatELF: универсальные двоичные файлы для Linux» . Проверено 2 августа 2020 г.
  5. ^ Уайлс, Майк; Феликс, Андре. MCM6830L7 MIKBUG/MINIBUG ROM (PDF) . Motorola Semiconductor Products, Inc. Проверено 31 июля 2020 г.
  6. ^ Годзе, Дипали А.; Годзе, Атул П. (2008). Микропроцессор (1-е изд.). Пуна, Индия: Технические публикации. стр. 3–15. ISBN  978-81-8431-355-0 .
  7. ^ Мауэрер, Вольфганг (2010). «Приложение E. Бинарный формат ELF» . Профессиональная архитектура ядра Linux . Джон Уайли и сыновья . п. Приложение E. ISBN  978-0-470-34343-2 . Проверено 1 августа 2020 г.
  8. ^ Ирвин, Кип Р. (1993). Язык ассемблера для IBM-PC (2-е изд.). Нью-Йорк, США: Макмиллан. ISBN  0-02-359651-1 .

Дальнейшее чтение [ править ]

Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 83c7f686c312fcd3bbde590f2415c4ec__1714528200
URL1:https://arc.ask3.ru/arc/aa/83/ec/83c7f686c312fcd3bbde590f2415c4ec.html
Заголовок, (Title) документа по адресу, URL1:
Object file - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)