2015-11-15 1 views
6

のエントリポイントのファイルオフセットを計算します。EXEファイル内のエントリ・ポイントのオフセットファイルを検索する方法についての情報がある</p> <p><a href="http://en.redinskala.com/finding-the-ep/" rel="noreferrer">http://en.redinskala.com/finding-the-ep/</a></p> <p>でPEファイル

ここで私はその

EP(ファイル)= AddressOfEntryPoint読むことができます - 私が使用し(私はこれを自分で計算されたとき、しかしBaseOfCode +の.text [PointerToRawData] + FileAlignment

をいくつかの異なるexeファイル)私は結論に達しました。

EXEファイルのエントリポイントのオフセット= AddressOfEntryPoint + .text [Pointe rToRawData] - AddressOfEntryPointはIMAGE_OPTIONAL_HEADERとIMAGE_SECTION_HEADERから他の二つの値から取り出され の.text [VirtualAddress]

そのWebページの情報は誤っていますか?彼らが間違っているようにFileAlignmentを追加するのは意味がありません。それとも?ファイルの整列は、値を計算するためにモジュロまたは何かを使うべきであることを示唆しています。 BaseOfCodeとFileAlignmentが同じ値(ほとんどの場合)であれば、それらを計算に追加することはできませんが、どのように意味がありますか?

+0

私はPE仕様を再度読み返す必要がありますが、ファイルの配置を追加するのは間違いです。整列していないオフセットが 'x'なら、' x - x%FileAlignment'に行きます。 –

答えて

2

正しい場合は、FileAlignmentの値をまったく使用する必要はありません。

アルゴリズムは、(あなたに非常によく似ています)次のようにのようなものでなければなりません:

  • このVAが存在するが(通常
  • 検索でセクションヘッダ(これはVAである)IMAGE_OPTIONAL_HEADER.AddressOfEntryPointからAddressOfEntryPointを取得最初のものですが、実際にはすべてのセクションヘッダーを検索する必要があります)。
  • 正しいセクションヘッダーを取得したら、VirtualAddressフィールドとPointerToRawDataフィールドを取得します。
  • AddressOfEntryPointから減算VirtualAddressPointerToRawDataに「デルタ」を追加します。あなたは今、まったく同じデルタはオフセットに適用されると、その後、「デルタ」
  • を持っています。

FileAlignmentは、エントリポイントが存在するセクションが既にその値に整列されているため、単純に不要です。

関連する問題

 関連する問題