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

Я путаю мало в терминологии.

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

Я получил это от "MS PE & COFF Specification"

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

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

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

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

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

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

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

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

13
задан claws 26 February 2010 в 17:06
поделиться

5 ответов

Я ОП. Каждый ответ - частичный ответ. Итак, я объединяю все остальные ответы с тем, что я узнал, чтобы закончить ответ.

Это " Обычно " используемая терминология.

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

  • Компоновщик создает файл изображения , который, в свою очередь, используется загрузчиком в качестве входных данных. Теперь файл изображения может быть либо исполняемым файлом , либо файлом библиотеки . Эти «файлы библиотеки» бывают двух видов:

    1. Статическая библиотека (файлы * .lib для Windows. * .A для Linux)
    2. Общие / динамические библиотеки: DLL (* .dll для Windows ) & Файл общих объектов (* .so в Linux)
  • Термин Двоичный файл / Двоичный может использоваться для обозначения ObjectFile или Файл изображения. Понять в зависимости от контекста. Это очень общий термин.

  • Загрузчик при загрузке файла изображения в память. Тогда он называется 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).
  • Я не знаю, есть ли в заголовке бит, который отличает объектный файл от файла изображения. Это нужно проверить.

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

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

14
ответ дан 1 December 2019 в 23:31
поделиться

В отношении Q2 для ELF ELF ELF является не только форматом файла изображения, но также Формат объекта объекта.

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

1
ответ дан 1 December 2019 в 23:31
поделиться

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

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

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

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

2
ответ дан 1 December 2019 в 23:31
поделиться

Это по определению оператора для на языке C. 6,8,5,3/2 «Оператор для »:

Можно опустить как выражение-1, так и выражение-3. Опущенное выражение-2 заменяется на ненулевая постоянная .

-121--3266157-

Последнюю редакцию, объединенную из багажника в ветвь, можно найти, выполнив эту команду в каталоге рабочей копии:

svn log -v --stop-on-copy
-121--849506-

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

1
ответ дан 1 December 2019 в 23:31
поделиться

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

0
ответ дан 1 December 2019 в 23:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: