2016-06-19 6 views
1

リンクelf-formatのElf32_Ehdr構造(page9)に従って、elfヘッダーサイズは52バイトに固定してください。しかし、フィールドe_ehsizeもあり、52バイトを超えることができます。最初のセクションのヘッダが始まるまでの余分なバイトはどこで定義されていますか?それが言うようにELFヘッダーサイズ52バイト以上

答えて

1

ELFヘッダーは、通常32ビットマシンでは52バイト、64ビットマシンでは64バイトであることに注意してください。 古い仕様[1]には、その説明に64ビットヘッダーが含まれていません。これはあなたが使っている仕様かもしれません。 [1] http://www.skyfree.org/linux/references/ELF_Format.pdf

文書[2]にアクセスする64ビットELFヘッダーを確認できます。 [2] ftp://www.linux-mips.org/pub/linux/mips/doc/ABI/elf64-2.4.pdf

32と64ビットのELFヘッダの差が進んでいる:

typedef struct{ 
     ........     //   struct Elf32_Ehdr 
    Elf64_Addr  e_entry; //[8 bytes] Elf32_Addr [4 bytes] 
    Elf64_Off  e_phoff; //[8 bytes] Elf32_Off [4 bytes] 
    Elf64_Off  e_shoff; //[8 bytes] Elf32_Off [4 bytes] 
     ....... 
} Elf64_Ehdr; 

サイズ差ことである(4 * 3)= 32から12バイトの64ビットELFヘッダー。また、ヘッダーには、仕様によって示されるように最後に余分なビットが含まれることに注意してください。
ELFバイナリを解析するときは、ファイルが32ビットまたは64ビットのELFであるかどうかを確認するために、最初の16バイトを最初に読み取るようにしてください。

2

は、また、9ページ:ELFヘッダは、実際のサイズが含まれているため

いくつかのオブジェクトファイル制御構造は、成長することができます。 オブジェクトファイルの形式がに変更された場合、プログラムは予想よりも大きくても小さくても構いません。したがって、プログラムは「余分な」情報を無視することがあります。 「欠落している」情報の扱いはコンテキストに依存し、が定義されている場合はと指定されます。

(強調が加えられる)。現在、余分なバイトのセマンティクスは定義されていません。彼らは拡張を構成するだろう。さらに、テキストは、Elf32_Ehdrセクションが52バイトより長いファイルを見つけた場合、余分なバイトを無視しても問題ないことを意味しています。

+0

もし私が気付かなかったときには52バイトが固定されています...セクション名などの余分なバイトに文字列があります。どこかで定義されているかわかりません – RedArrow

+0

あなたは正しいです!私の試行を通して、私はリンカまたはコンパイラの設定から来るはずの固定バイトを置く52バイトを覚えています – RedArrow

関連する問題