2016-08-01 9 views
3

PEファイルのオフセット0x3cにあるPEヘッダーへのポインターは、常に0x80に設定されていますか?PEファイルのオフセット0x3cにあるPEヘッダへのポインタは、常に0x80に設定されていますか?

なぜこのポインタが変わるのだろうか。 DOSヘッダーとスタブは、最初に書かれたので変更されていないと思います。

PEヘッダは、これらのDOSアーチファクトの直後に開始されるため、PEポインタは常に0x80に設定されますか?そうでない場合、なぜですか?

答えて

2

オフセット0x3cのではない、PEヘッダ - これは> = 0x40の

8

多くのプログラムによりダウンNTヘッダを押し、DOSスタブの後に追加されRich signatureを有する任意の値とすることができるIMAGE_DOS_HEADER.e_lfanewあります可変量。

別のDOSスタブを使用することも、まったく使用しないこともできます。 "このプログラムはDOSモードでは実行できません"という印字は必要ありません。小規模のDOSゲーム、ハードディスクのワイパー、何かが全く違うものを印刷することができます。

慎重に考えている場合でも、overlap the NT header with the DOS headerというオフセットを使用することもできます。オフセットは< 0x40です。これはあまりにも難しいことではありません。問題となるDOSヘッダの唯一の部分はe_lfanewと "MZ"なので、NTヘッダーを動作させるために必要なものは他にもあります。 e_lfanewは、その値を安全に持つことができるNTヘッダーの一部に合わせるだけで済みます。

+0

ありがとうございます。私のPEダイアグラムにはリッチシグネチャがありません。また、DOSスタブはPE標準の一部ではありません(私はその内容を意味します)? – Shuzheng

+1

@NicolasLykkeIversen 私はあなたが望むものであればDOSスタブに入れられることを100%確信しています(正しいDOS実行ファイルであれば正しく実行されます)。いくつかのシンプルなアプリケーションは、マルチプラットフォームの実行可能ファイルを提供するためにこれを使用していたので、DOSとWindowsの両方で実行することもできました。 – Ped7g

関連する問題