我正在尝试使用GetProcAddress获取GetProcAddress的地址(是的。自己调用它)。 当我从一个空的exe项目中执行它时,我得到一个有效的地址(在kernel32的分配地址之间)。
当我从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运行时它会返回相同的无效地址...
请帮忙。
答案 0 :(得分:0)
Exe通常在其首选地址加载,当DLL选择ASLR时以及需要重定位时(例如,已经采用了它们的首选地址),DLL通常会重新定位(不在其首选地址加载)。这可以解释您在行为之间经历的增量。
答案 1 :(得分:0)