私はGetProcAddressでGetProcAddressのアドレスを取得しようとしています。 空のexeプロジェクトから実行しているときに、有効なアドレス(kernel32の割り当てられたアドレスの間)を取得します。getprocaddressはdllとexeと異なる動作をします
私は、DLLからそれを呼んでいるとき、私は(ない割り当てられたカーネル32の範囲で)無効なアドレスを取得しています
違いは何ですか? 私はWindows 7で64ビットで動作しています。
プロジェクトは32ビットとしてコンパイルされます。 ここに私が実行しているコードがあります:
typedef FARPROC(WINAPI * GetProcAddressType)(HMODULE、LPCSTR);
HMODULE kernel32Hmodule = LoadLibraryW(L "C:\ WINDOWS \ SYSTEM32の\のkernel32.dllの");
GetProcAddressTypeのABC =(GetProcAddressType)のGetProcAddress(kernel32Hmodule、 "のGetProcAddress")。
私はまた、このようなアドレスを取得しようとします。void * A =のGetProcAddressを。 しかし、DLLから実行したときには、同じ不正なアドレスを返す...
助けてください。
Kernel32.dllは再配置されません。 ASLRオフセットは再起動するまで変更されません。 –
Hansを修正しました。私はこれを忘れました、ありがとう!だからこそ私は「説明することができる」と書いた:-) – mox
ok私は問題を見つけた。 rundll32でdllをロードしたときにwierdが動作しました...自分でローダーをビルドすると(loadlibrary、getprocaddressより)うまく動作しました。 rundll32が原因で問題が発生しました –