16

私は用語を少し混乱させています。

リンカーへの入力として与えられるファイルはObject Fileと呼ばれます。リンカーはイメージ ファイルを生成し、それはローダーによって入力として使用されます。

「MS PE&COFF仕様書」より頂きました。

Q1. Binary Image画像ファイルは、Binary Fileまたは単にとも呼ばれますBinary。右?

Q2. したがって、上記の用語によると、PE/ELF/COFF はイメージ ファイルの形式であり、オブジェクト ファイルではありません。右?しかしhttp://www.sco.com/developers/gabi/latest/ch4.intro.htmlは言う

この章では、ELF (Executable and Linking Format) と呼ばれるオブジェクト ファイル形式について説明します。オブジェクト ファイルには、主に 3 つのタイプがあります。

  • 再配置可能ファイルには、他のオブジェクト ファイルとリンクして実行可能ファイルまたは共有オブジェクト ファイルを作成するのに適したコードとデータが含まれています。

  • 実行可能ファイルには、実行に適したプログラムが含まれています。このファイルは、exec(BA_OS) がプログラムのプロセス イメージを作成する方法を指定します。

  • 共有オブジェクト ファイルには、2 つのコンテキストでのリンクに適したコードとデータが含まれています。まず、リンク エディタ [ld(BA_OS) を参照] は、共有オブジェクト ファイルを他の再配置可能共有オブジェクト ファイルと一緒に処理して、別のオブジェクト ファイルを作成します。次に、ダイナミック リンカーは、プロセス イメージを実行可能ファイルやその他の共有オブジェクトと組み合わせて、プロセス イメージを作成します。

矛盾して、彼はオブジェクト ファイルとイメージ ファイルの両方が ELF 形式であると言っています。彼はオブジェクト ファイルとイメージ ファイルをまったく区別しておらず、一般的にオブジェクト ファイルと呼んでいます。それは間違っていませんか?

Q3. PEはCOFFから派生したものだと知っています。しかし、なぜ Microsoft の PE フォーマットの仕様は、Microsoft Portable Executable および Common Object File Format Specification と名付けられたのでしょうか。彼らはまだCOFFをサポートしていますか? もしそうなら、どのOSで?PE はずっと前に COFF に完全に取って代わったと思っていました。

4

5 に答える 5

16

私はOPです。それぞれの答えは部分的な答えです。だから、私は答えを完成させるために学んだことと他のすべての答えを組み合わせています。

これは「一般的に」使用される用語です。

  • リンカへの入力 (アセンブラの出力) として与えられるファイルは、Object Fileまたはと呼ばれRelocatable Fileます。

  • リンカは を生成しImage file、それがローダーによって入力として使用されます。ここで、はまたはImage fileのいずれかになります。これらの「ライブラリ ファイル」には、次の 2 種類があります。Executable fileLibrary file

    1. スタティック ライブラリ (Windows の場合は *.lib ファイル。Linux の場合は *.a)
    2. 共有/動的ライブラリ : DLL( Windows では *.dll) & Shared Object file(Linux では *.so )
  • Binary File/という用語Binaryは、ObjectFile または ImageFile のいずれかを指すために使用できます。文脈によってはわかりません。これは非常に一般的な用語です。

  • 画像ファイルをメモリにロードするときのローダー。次に、それが呼び出されますModule(Linuxの人についてはわかりませんが、Windowsの人はそれを呼び出しますModule

http://www.griffy.com/pubdoc/1978433/L.jpg 代替テキスト http://www.griffy.com/pubdoc/1978433/L.jpg

私が言ったように、これらは「一般的に」使用される用語です。「バイナリ ファイル」、「イメージ ファイル」、または「オブジェクト ファイル」という用語には厳密な定義はありません。

特に、「オブジェクト ファイル」という用語は、コンパイラがリンカで使用するために出力する中間ファイルを意味する場合がありますが、別の文脈では実行可能ファイルを意味する場合もあります。

特に異なるプラットフォームでは、異なるものや類似のものを参照するために使用される場合があります。単一のプラットフォームで問題を議論する場合でも、ライターによって用語の使い方が多少異なる場合があります。

  • ObjectFile と ImageFile はどちらも、Windows では PE 形式、Linux では ELF 形式です。
  • ELF はイメージ ファイルの形式だけでなく、オブジェクト ファイルの形式でもあります。
  • すべての ELF ファイルは ELF ヘッダーで始まります。ELF ヘッダーの 2 番目のフィールドは次のとおりですe_type。このフィールドは、ファイルがオブジェクト ファイル (ELF 用語では再配置可能ファイル) であるか、イメージ (実行可能ファイルまたは共有オブジェクトのいずれか) であるか、またはその他のもの (コア ファイルも ELF ファイル) であるかを示します。
  • オブジェクト ファイルとイメージ ファイルを区別するヘッダーにビットがあるかどうかはわかりません。チェックする必要があります。

PEはCOFFから派生したものだと知っています。しかし、なぜ Microsoft の PE フォーマットの仕様は、Microsoft Portable Executable および Common Object File Format Specification と名付けられたのでしょうか。彼らはまだCOFFをサポートしていますか? もしそうなら、どのOSで?PE はずっと前に COFF に完全に取って代わったと思っていました。

「PE」対「COFF」に関して言えば、Microsoft は「COFF」仕様を「PE」仕様の出発点として使用していましたが、ニーズに合わせて拡張したことを思い出します。厳密に言えば、「PE」ファイルは「COFF」ファイルではありませんが、多くの点で非常に似ています。

于 2010-02-03T22:25:19.153 に答える
3

「バイナリ ファイル」、「イメージ ファイル」、または「オブジェクト ファイル」という用語には厳密な定義はありません。

特に、「オブジェクト ファイル」という用語は、リンカーが使用するためにコンパイラによって出力される中間ファイルを意味するために使用されることがありますが、別の文脈では実行可能ファイルを意味する場合もあります。

特に異なるプラットフォームでは、異なるものや類似のものを参照するために使用される場合があります。単一のプラットフォームで問題を議論する場合でも、ライターによって用語の使い方が多少異なる場合があります。

「PE」対「COFF」に関して言えば、Microsoft は「COFF」仕様を「PE」仕様の出発点として使用していましたが、ニーズに合わせて拡張していたようです。厳密に言えば、「PE」ファイルは「COFF」ファイルではありませんが、多くの点で非常に似ています。

于 2010-01-31T06:44:47.933 に答える
1

gcc -c は、Linux システムで elf 形式のオブジェクト ファイルである .o ファイルを生成します。「ELF 32 ビット LSB リロケータブル、Intel 80386、バージョン 1 (SYSV)」は、私のマシンの file コマンドで .o ファイルを記述する方法です。

于 2010-01-31T07:01:37.010 に答える
1

Q2 for ELFに関してですが、ELFは画像ファイルのフォーマットだけでなく、オブジェクトファイルのフォーマットでもあります。

すべての ELF ファイルはELF Headerで始まります。ELF ヘッダーの 2 番目のフィールドは次のとおりですe_type。このフィールドは、ファイルがオブジェクト ファイル (ELF 用語では再配置可能)、イメージ (実行可能ファイルまたは共有オブジェクトのいずれか)、またはその他 (コア ファイルも ELF ファイル) であるかどうかを示します。

于 2010-01-31T09:39:42.263 に答える
0

余談ですが、Solaris (および他の Unix フレーバーを推測しています) のコア ダンプが ELF 形式になる可能性があることは知っています。

于 2010-02-26T17:01:19.547 に答える