質問

EXE ヘッダーに奇妙な値が配置されているのを見ました

00000000 :4D 5A 90 00 03 00 00 00 - 04 00 00 00 FF FF 00 00
00000010 :B8 00 00 00 00 00 00 00 - 40 00 00 00 00 00 00 00
00000020 :00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00
00000030 :00 00 00 00 00 00 00 00 - 00 00 00 00 A8 00 00 00
00000030 :00 00 00 00 00 00 00 00 - 00 00 00 00 A8 00 00 00 <-

何が何だか分からない A8 そこで実行していますが、それをゼロに置き換えると、プログラムは実行されません。

一言で:それは何ですか?

また、完全な MS DOS ヘッダーへのリンクも教えていただけますか?

役に立ちましたか?

解決

オフセット0x3cので

DWORDはIMAGE_NT_HEADERS別名、新しいEXEヘッダのオフセットされています。あなたがそこに値を変更するのであれば、PEローダは新しいEXEヘッダを見つけることができません。

他のヒント

PEの最初の部分は、MS-DOSスタブです。 0x3cの(あなたの「A8」である)で、PEファイルの署名にオフセットがあります。あなたはそれをゼロにした場合、ローダーは、PE署名を見つけることができなくなりますし、それをロードすることを拒否します(または単にMS-DOS実行ファイルとしてそれをロード、私がしようとしませんでした)。 詳細については、 PEフォーマット仕様

これは新しい PE ヘッダーへのオフセットであると思われます。最初の 30 奇数バイトは MS-DOS ヘッダーであり、「A8」が存在するファイルへのオフセットは構造体のフィールドに対応します。 _IMAGE_DOS_HEADER 呼ばれた LONG e_lfanew; // File address of new exe header;値「A8」が新しい値の一部になるということです。 IMAGE_NT_HEADER この情報が含まれているもの

  • DWORD 署名。
  • _IMAGE_FILE_HEADER ファイルヘッダー;
  • _IMAGE_OPTIONAL_HEADER オプションのヘッダー。

次の定数で示されるように、最初の 2 バイトは、実行可能ファイルへの元の MS-DOS ヘッダーです。 WORD IMAGE_DOS_SIGNATURE = 0x5A4D; // MZ;IMAGE_NT_HEADER には、NT プラットフォーム用の実行可能ファイルであることを識別するためのこの署名があります。 DWORD IMAGE_NT_SIGNATURE = 0x00004550; // PE00;

これらすべての情報は、次のヘッダー ファイルにあります。 pe.h.

そこで何が起こったのかというと、値「A8」を消去したため、ローダーがその値を見つけることができませんでした。 IMAGE_NT_HEADER したがって失敗しました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top