ELFマジックについての議論はこれまでにありましたが、ごく最近、このSecurity stack exchange questionのコメントがありました。私はそれが前に言及されたのを見た、そして私は自分のブートログでそれを見た..しかし、私はそれが何であるかわからない。
elf のmanページは、C言語や低レベルの言語を実行していないため、頭に少し載っています。
Linuxを毎日のオペレーティングシステムとして使用している人として、ELFとは何ですか?
ELFマジックについての議論はこれまでにありましたが、ごく最近、このSecurity stack exchange questionのコメントがありました。私はそれが前に言及されたのを見た、そして私は自分のブートログでそれを見た..しかし、私はそれが何であるかわからない。
elf のmanページは、C言語や低レベルの言語を実行していないため、頭に少し載っています。
Linuxを毎日のオペレーティングシステムとして使用している人として、ELFとは何ですか?
回答:
参照する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実行可能ファイルとして明確に識別します。多くのファイル形式には、同じタスクを実行する「マジック」バイトがあり、ファイルの種類を識別します。
readelf
。
e_ident
最初の4つのバイトは(マジックナンバーであるの)、EI_MAG0
経由EI_MAG3
)
/bin
、確かに、ほぼ間違いなくELFバイナリです。ただし、ダウンロードしたいくつかのランダムなファイルは...わかりません。
「マジック番号」は、ファイルの先頭にある一定のバイトシーケンス(通常)に付けられた名前であり、それらのファイルを特定のファイル形式としてマークするために使用されます。ファイル拡張子と同様の目的を果たします。
詳細については、専門用語ファイルのエントリを参照してください。
たとえば、PNG画像は常に同じ8バイトで始まります:137 80 78 71 13 10 26 10
したがって、ELFマジック番号は、elfファイルの先頭のバイトであり、それらを識別します。