4

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 ヘッダーへのリンクも教えていただけますか?

4

3 に答える 3

4

PE の最初の部分は MSDOS スタブです。0x3C (「A8」がある場所) には、PE ファイル署名へのオフセットがあります。ゼロにすると、ローダーは PE 署名を見つけることができず、ロードを拒否します (または、MS-DOS 実行可能ファイルとしてロードしますが、試していません)。詳細については、PE 形式の仕様を参照してください。

于 2010-02-02T11:24:20.467 に答える
3

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

  • DWORD 署名;
  • _IMAGE_FILE_HEADER ファイルヘッダー;
  • _IMAGE_OPTIONAL_HEADER OptionalHeader;

最初の 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失敗しました。

于 2010-02-02T11:36:17.457 に答える
3

オフセット 0x3c の DWORD は、IMAGE_NT_HEADERS とも呼ばれる新しい EXE ヘッダーのオフセットです。したがって、そこで値を変更すると、PE ローダーは新しい EXE ヘッダーを見つけることができません。

于 2010-02-02T11:22:19.893 に答える