ELF Magicとは何ですか?


26

ELFマジックについての議論はこれまでにありましたが、ごく最近、このSecurity stack exchange questionのコメントがありました。私はそれが前に言及されたのを見た、そして私は自分のブートログでそれを見た..しかし、私はそれが何であるかわからない。

elf のmanページは、C言語や低レベルの言語を実行していないため、頭に少し載っています。

Linuxを毎日のオペレーティングシステムとして使用している人として、ELFとは何ですか?



13
タイトルはrpg stackexchangeにより適しています。
クトゥルフ14

回答:


37

参照するmanページから直接:

elf - format of Executable and Linking Format (ELF) files

ELFは、Linuxで使用される実行可能ファイルのバイナリ形式を定義します。実行可能ファイルを呼び出す場合、OSは実行可能ファイルをメモリに適切にロードする方法、動的ライブラリの依存関係を解決する方法、および実行を開始するためにロードされた実行可能ファイルにジャンプする場所を知る必要があります。ELF形式はこの情報を提供します。ELFマジックはELFファイルを識別するために使用され、ファイルの最初の数バイトにすぎません。

% od -c -N 16 /bin/ls
0000000 177   E   L   F 002 001 001  \0  \0  \0  \0  \0  \0  \0  \0  \0
0000020

または

% readelf -h /bin/ls | grep Magic
  Magic:   7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 

これらの16バイトは、ファイルをELF実行可能ファイルとして明確に識別します。多くのファイル形式には、同じタスクを実行する「マジック」バイトがあり、ファイルの種類を識別します。


8
実際の魔法は、最初の4バイトだけです。次のフィールドは、エンディアン、CPUアーキテクチャ、およびその他のさまざまなものについて説明しています。
サイモンリヒター14

セマンティクスに要約される@SimonRichter。最初の4バイトは多くのファイルタイプの一般的な識別のための魔法ですが、質問者は「ELFマジック」を指定しましたreadelf
ケーシー14

2
あなたが本当に技術的な取得したい場合は、最初の16のバイトは、「識別」(あるe_ident最初の4つのバイトは(マジックナンバーであるの)、EI_MAG0経由EI_MAG3
マイケル・Mrozek

1
@slebetman私の「マジック」の使用法はELF仕様に由来しています。「ファイルの最初の4バイトは「マジックナンバー」を保持し、ファイルをELFオブジェクトファイルとして識別します」
Michael Mrozek

2
「明確に」は少し誇張されています。ファイルがどこから来たのかわからない限り、何でも推測に過ぎません。のファイルは/bin、確かに、ほぼ間違いなくELFバイナリです。ただし、ダウンロードしたいくつかのランダムなファイルは...わかりません。
cHao 14

11

「マジック番号」は、ファイルの先頭にある一定のバイトシーケンス(通常)に付けられた名前であり、それらのファイルを特定のファイル形式としてマークするために使用されます。ファイル拡張子と同様の目的を果たします。

詳細については、専門用語ファイルのエントリを参照してください。

たとえば、PNG画像は常に同じ8バイトで始まります:137 80 78 71 13 10 26 10

したがって、ELFマジック番号は、elfファイルの先頭のバイトであり、それらを識別します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.