PEファイルのオフセット0x3cにあるPEヘッダーへのポインターは、常に0x80に設定されていますか?PEファイルのオフセット0x3cにあるPEヘッダへのポインタは、常に0x80に設定されていますか?
なぜこのポインタが変わるのだろうか。 DOSヘッダーとスタブは、最初に書かれたので変更されていないと思います。
PEヘッダは、これらのDOSアーチファクトの直後に開始されるため、PEポインタは常に0x80に設定されますか?そうでない場合、なぜですか?
PEファイルのオフセット0x3cにあるPEヘッダーへのポインターは、常に0x80に設定されていますか?PEファイルのオフセット0x3cにあるPEヘッダへのポインタは、常に0x80に設定されていますか?
なぜこのポインタが変わるのだろうか。 DOSヘッダーとスタブは、最初に書かれたので変更されていないと思います。
PEヘッダは、これらのDOSアーチファクトの直後に開始されるため、PEポインタは常に0x80に設定されますか?そうでない場合、なぜですか?
オフセット0x3cのではない、PEヘッダ - これは> = 0x40の
多くのプログラムによりダウン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ヘッダーの一部に合わせるだけで済みます。
ありがとうございます。私のPEダイアグラムにはリッチシグネチャがありません。また、DOSスタブはPE標準の一部ではありません(私はその内容を意味します)? – Shuzheng
@NicolasLykkeIversen 私はあなたが望むものであればDOSスタブに入れられることを100%確信しています(正しいDOS実行ファイルであれば正しく実行されます)。いくつかのシンプルなアプリケーションは、マルチプラットフォームの実行可能ファイルを提供するためにこれを使用していたので、DOSとWindowsの両方で実行することもできました。 – Ped7g