探しているのはDllCharacteristics
、PE ヘッダーのフィールドのフラグです (フィールドと混同しないでくださいCharacteristics
)。
Microsoft はこのフラグIMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE
を と呼び、 として定義されてい0x40
ます。ご想像のとおり、優先ベース アドレス (PE ヘッダーの「ImageBase」フィールドに設定) 以外のアドレスにイメージをロードする必要があるかどうかを示します。
でそのフラグをマスクする場合はDllCharacteristics
、 が正しいことを再確認してくださいImageBase
。必要な場所に正確に DLL をロードする必要があります。それが機能しない場合は、フィールドにIMAGE_FILE_RELOCS_STRIPPED
( 0x1
) フラグを追加する必要がある場合もありCharacteristics
ます。
合併症が発生する可能性があります。私はこの手法をシステム DLL でテストしたことがないので、最近の Windows バージョンがパッチを適用したイメージの読み込みに消極的であっても驚かないでください。手始めにCheckSum
、パッチを反映するようにヘッダーのフィールドを修正する必要がある場合があります。また、無効になっているデジタル署名を削除する必要がある場合もあります。最近のモジュールローダーがどれほどうるさいのか正確にはわかりませんが、それらは私が予想する種類の問題です。
PE ヘッダーの公式ドキュメントは、https: //msdn.microsoft.com/en-us/library/windows/desktop/ms680339%28v=vs.85%29.aspx (かなり簡潔ですが) にあります。