2

私はコンパイルプロセスについて読んでいます。解析などの以前の概念のいくつかは理解していますが、最後に実行可能ファイルがどのように作成されるかを理解することはできません。

私が見た例では、「コンパイラ」はBNFによって定義された言語の形式で入力を受け取り、解析するとアセンブリを出力します。

実行可能ファイルは文字通りバイナリ形式のアセンブリだけですか? アセンブリから実行可能ファイルを作成するためのアプリケーションがあることを考えると、これは当てはまらないと思いますか?

これに答えられない場合 (つまり、スタック オーバーフロー フォーマットには複雑すぎる場合)、リンクや本に完全に満足しているので、自分自身を教育することができます。

4

3 に答える 3

0

すべてではありませんが、一部の (gcc など) コンパイラは、高水準言語からアセンブリ言語に移行してから、アセンブラを生成します。アセンブラはアセンブリ言語を読み取り、マシン コードを生成し、ご想像のとおり、マシン コード ビット以上のものを含むオブジェクト ファイルを生成します。ちょっと考えてみると、別のソースファイルで定義されている変数または関数は、そのコードが別のオブジェクトファイルに存在することを意味することに気付くかもしれません.リンク時まで、1つのオブジェクトはその外部関数に到達する方法を知りません.マシン コードは完成していません。外部アドレスのパッチはリンク時まで行われません。2) オブジェクト ファイルには、このオブジェクト ファイル内のパブリック アイテムと不足している外部アイテムを定義する情報が必要です。たとえば、明らかにマシンコードに埋め込まれていない関数の名前。そのため、オブジェクトには、さまざまな完了状態のマシン コードと、リンカーが必要とするその他のデータが含まれています。次に、リンカーは...リンク...すべてが解決された1つのプログラムにオブジェクトをまとめます。基本的にすべてのマシンコードを完成させ、マシンコードのフラグメント(個別のオブジェクト内)を1つの場所に配置します。次に、それらすべてを何らかの形式でディスクに保存する必要があります。通常、その形式は生のマシンコードだけではありません。ファイルには、ヘッダーから始まる余分なものがあり、各バイナリ BLOB を定義する方法と、実行前にメモリ内に存在する必要がある場所があります。オペレーティング システムのコマンド ラインでプログラムを実行したり、ファイル マネージャの GUI でダブルクリックしたりすると、オペレーティング システムはそのファイル形式の読み取り方法を認識します。

aout、elf、coff、intel hex、motorola s-record はすべて一般的な形式であり、一部のツールチェーンで生成できる生のバイナリも同様です。gnu ツールのデフォルトは 1 つ (coff または elf または exe または aout) であり、次に objcopy を使用してあるものから別のものに変換するか、少なくともデフォルトのものを他のものに変換し、可能な選択肢を示すヘルプがあります。次に、それらをグーグルまたはウィキペディアで検索して、ファイル形式の定義を見つけます。Intel hex または motorola srecord は、おそらく wikipedia で開始するのに適したものであり、おそらく elf です。

于 2014-10-02T04:37:31.177 に答える
0

コンパイラ (具体的にはリンカー) が実行可能ファイルを作成します。

通常、ファイルの形式はオペレーティング システムによって異なります。

現在、ELF と COFF の 2 つの主な形式があります。

http://en.wikipedia.org/wiki/Executable_and_Linkable_Format

http://en.wikipedia.org/wiki/COFF

構造の概念を理解していれば、これは同じで、ファイル内のみです。各ファイルにはヘッダーと呼ばれる最初の構造があり、そこから必要に応じて他の構造にアクセスできます。

ほとんどの場合、結果のバイナリ コードのみがこれらのファイルに保存されますが、デバッグ情報が見つかることがよくあります。一部の形式ではコードに沿ってソースを保存できますが、現在ではソースへの必要な参照のみが保存されます。

動的リンクを使用すると、実際のシンボル名を含むシンボル テーブルも見つかります。それ以外の場合は、再配置テーブルのみが必要になります。

Amiga では、「セグメント」でコードを定義することもできました。一度にロードできるセグメントは 1 つだけです。セグメントの処理が完了したら、それをアンロードして別のセグメントをロードできます。それでも、最終的にはコンセプトは似ていました。ファイル内の構造。

Microsoft は、COFF 形式に関する PDF を提供しています。私は今彼らのウェブサイトでそれを見つけることができませんでしたが、他の人がそれを持っているようです. ELF のウィキペディア ページには多くのリンクがあるため、開始するには PDF を見つけることができるはずです。

于 2014-10-02T04:23:09.167 に答える