我想獲取GetProcAddress的地址與GetProcAddress(是的,調用它本身)。 當我從一個空的EXE項目做的時候,我得到一個有效的地址(在kernel32的分配地址之間)。getprocaddress不同於一個DLL和一個EXE
當我從一個DLL調用它,我收到無效的地址(而不是在分配KERNEL32的範圍)
的區別是什麼? 我在64位Windows 7上運行。
該項目被編譯爲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偏移纔會更改。 – 2012-03-03 17:37:56
正確Hans,我忘了這個,謝謝!這就是爲什麼我寫了「可以解釋......」:-) – mox 2012-03-04 01:15:26
好的,我發現這個問題。 當我用rundll32加載dll時,它的行爲很奇怪...當我自己構建一個加載程序(loadlibrary,比getprocaddress)它工作正常。 rundll32是造成問題的原因之一 – 2012-03-04 07:58:14