これは私が試みることです:
モジュールのHMODULE
ハンドルは、実際にはモジュールのイメージのベースアドレスであることに注意してください。GetModuleHandle
この値を取得するために使用できます。これを画像のオプションのヘッダー値のベースアドレスと比較すると、ASLRがオンになっている場合、これら2つの値は異なると予想されます。
GetModuleHandle
これは、特定のシステムDLLで使用された場合にのみ、ASLRの明確な指標になることに注意してください。kernel32
それは画像再配置の典型的な候補ではないので、それはうまくいくでしょう:
- MicrosoftシステムDLLには、すべて固有の推奨ベースアドレスが与えられています。と
- これは、プロセスアドレス空間にマップされた最初のDLLの1つです。
通常は再配置されないためkernel32
、ASLRがオフになっている場合は、推奨されるベースアドレスにロードされると予想するのが妥当です。
画像ヘッダーから推奨ベースアドレスをどのように取得しますか?最も簡単な方法は、DUMPBIN
VisualC++に含まれているユーティリティを使用することです。プログラムで実行したい場合は、IMAGE_OPTIONAL_HEADER
構造体のImageBase
フィールドが見つかるまで、実行可能イメージのヘッダーを調べていく必要があります。PEヘッダーの詳細については、 MattPietrekによる「 Win32PortableExecutableFileFormatの詳細」をお勧めします。