Разъяснение форматов и терминов двоичного файла (PE/COFF & ELF)

Я немного запутался в терминологии.

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

Я получил это от "Спецификация MS PE и COFF"

Q1. Файл изображения также называется Binary Image, Binary File или просто Binary. Правильно?

Q2. Таким образом, согласно вышеуказанной терминологии, PE/ELF/COFF являются форматами файла изображения, а не файла объекта. правильно? Но http://www.sco.com/developers/gabi/latest/ch4.intro.html говорит

В этой главе описывается формат объектного файла, называемый ELF (Исполняемый и Связывающий формат). Существует три основных типа объектных файлов.

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

  • В исполняемом файле содержится программа, подходящая для исполнения; file указывает, как создает exec (BA_OS) образ программного процесса.

  • Общий файл объекта хранит код и данные, подходящие для соединения в двух контексты. Во-первых, редактор ссылок [см. ld (BA_OS)] обрабатывает общий объект файл с другим перемещаемым и общим объектные файлы для создания другого объекта файл. Во-вторых, динамический компоновщик объединяет его с исполняемым файлом и другие общие объекты для создания образ процесса.

В противоположность этому он говорит, что оба файла объекта и файла изображения являются форматами ELF, и он вовсе не различает файлы объектов и изображений, но обычно ссылается на файлы объектов. Разве это не так?

Q3. Я знаю, что PE получен из COFF. Но почему спецификации Microsoft для формата PE называются Microsoft Portable Executable и спецификация формата файла единого объекта. Поддерживают ли они еще COFF? Если они, в какой ОС? Я думал, что PE полностью заменил COFF давно.

Ответы

Ответ 1

Я OP. Каждый ответ является частичным ответом. Итак, я совмещаю все другие ответы с тем, что я узнал, чтобы завершить ответ.

Это терминология Обычно.

  • Файл, который вводится в качестве вставки в компоновщик (вывод ассемблера), называется Object File или Relocatable File.

  • Компонент создает Image file, который, в свою очередь, используется в качестве входа загрузчика. Теперь Image file может быть либо Executable file, либо Library file. Эти "Библиотечные файлы" бывают двух видов:

    • Статическая библиотека (*.lib файлы для Windows. *.a для Linux)
    • Общие/Динамические библиотеки: DLL (*.dll в Windows) и Shared Object file (*.so в Linux)
  • Термин Binary File/Binary может использоваться для обозначения ObjectFile или ImageFile. Undestand в зависимости от контекста. Это очень общий термин.

  • Загрузчик при загрузке файла изображения в память. Затем он называется Module (я не уверен в ребятах из Linux, но ребята из Windows называют его Module

http://www.gliffy.com/pubdoc/1978433/L.jpg alt text http://www.gliffy.com/pubdoc/1978433/L.jpg

Как я уже сказал, это терминология " вообще". Не существует строгих определений терминов "двоичный файл", "файл изображения" или "объектный файл".

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

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

  • Оба ObjectFile и ImageFile находятся в формате PE в Windows и в формате ELF в Linux.
  • ELF - это не только формат файла изображения, но также и формат объектного файла.
  • Каждый файл ELF начинается с заголовка ELF. Второе поле заголовка ELF - e_type; эти поля позволяют нам узнать, является ли файл объектным файлом (он же перемещаемый в элементе ELF) или изображение (которое может быть исполняемым или совместно используемым объектом) или что-то еще (основной файл также является файлами ELF).
  • Я не знаю, есть ли бит в заголовке, который отличает файл Object от файла изображения. Его нужно проверить.

Я знаю, что PE получен из COFF. Но почему Microsoft спецификация формата PE называется Microsoft Portable Executable "и Общий формат файла объекта Спецификация". Они все еще поддерживают COFF? Если они, в какой ОС? я думал PE полностью заменил COFF давно.

Что касается "PE" и "COFF" , то я вспоминаю, что Microsoft использует спецификацию "COFF" в качестве отправной точки для спецификации "PE" , но расширила ее для своих нужд. Так что, строго говоря, файл "PE" не является файлом "COFF" , но он очень похож по-разному.

Ответ 2

Нет строгих определений для терминов "двоичный файл", "файл изображения" или "объектный файл".

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

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

Что касается "PE" и "COFF" , то я вспоминаю, что Microsoft использует спецификацию "COFF" в качестве отправной точки для спецификации "PE" , но расширила ее для своих нужд. Так что, строго говоря, файл "PE" не является файлом "COFF" , но он очень похож по-разному.

Ответ 3

gcc -c создаст файл .o, который является объектным файлом формата elf, в системе Linux. "ELF 32-разрядный LSB, перемещаемый, Intel 80386, версия 1 (SYSV)" - это то, как файл .o описывается командой file на моей машине.

Ответ 4

Что касается Q2 для ELF, ELF - это не только формат файла изображения, но и также формат объектного файла.

Каждый файл ELF начинается с Заголовок ELF. Второе поле заголовка ELF составляет e_type; эти поля позволяют нам узнать, является ли файл объектным файлом (он же перемещается на языке ELF), изображение (которое может быть либо исполняемым, либо совместно используемым объектом) или что-то еще (основной файл также является файлами ELF).

Ответ 5

Как и в стороне, я знаю, что основные дампы на Solaris (и я угадываю другие ароматы Unix) могут быть в формате ELF.