コンパイラーによって生成される最終イメージには、binファイルと拡張ローダー形式のELfファイルの両方が含まれます。この2つの違いは、特にELFファイルのユーティリティです。
Binファイルは、メモリの修正や再配置のない純粋なバイナリファイルであり、特定のメモリアドレスにロードされる明示的な命令を持っている可能性が高くなります。一方、...
[〜#〜] elf [〜#〜] ファイルは、シンボルルックアップと再配置可能なテーブルで構成される実行可能なリンク可能形式です。つまり、カーネルによって任意のメモリアドレスにロードできます。自動的に、使用されるすべてのシンボルが、ロードされたメモリアドレスからのオフセットに調整されます。通常、ELFファイルには「data」、「text」、「bss」など、いくつかのセクションがありますが、いくつかは...ランタイムがシンボルのメモリ参照を調整する場所を計算できるセクションです実行時に動的に。
Binファイルは、プログラムを実行するROMまたは特定のアドレスに入るビットとバイトです。このデータを取得してそのまま直接読み込むことができますが、通常はベースアドレスが存在しないため、ベースアドレスが何であるかを知る必要があります。
Elfファイルにはbin情報が含まれていますが、他の多くの情報、可能性のあるデバッグ情報、シンボルに囲まれ、コードをバイナリ内のデータから区別できます。バイナリデータの複数のチャンクを許可します(これらのいずれかをビンにダンプすると、フィルデータを含む1つの大きなビンファイルを取得して、次のブロックにパディングします)。バイナリの数と、ゼロに初期化する必要のあるbssデータの量を示します(gnuツールには、binファイルの作成に問題があります)。
Elfファイル形式は標準であり、armは標準の拡張機能/バリエーションを公開しています。私は誰もがエルフ解析プログラムを書いてそこにあるものを理解することをお勧めします。ライブラリに煩わされることはありません。仕様の情報と構造を使用するのは簡単です。一般的な.binファイルの作成、およびbinまたはelf出力を台無しにするのに役立つリンカースクリプトなどのデバッグで、gnuの問題を克服するのに役立ちます。
いくつかのリソース:
通常、ELF形式はコンパイルのデフォルト出力です。 GNUツールチェーンを使用する場合、次のようなobjcopyを使用してバイナリ形式に変換できます。
arm-elf-objcopy -O binary [elf-input-file] [binary-output-file]
またはfromELFユーティリティを使用します(ただし、ADSなどのほとんどのIDEで構築されます)。
fromelf -bin -o [binary-output-file] [elf-input-file]