C++ 使用32位应用程序从64位kernel32.dll获取函数地址
我有一个运行在C++ 使用32位应用程序从64位kernel32.dll获取函数地址,c++,winapi,64-bit,32-bit,getprocaddress,C++,Winapi,64 Bit,32 Bit,Getprocaddress,我有一个运行在64位Windows(WOW64)上的32位应用程序。 我需要从kernel32.dll中知道几个WinAPI函数的地址 A可以很容易地获取32位kernel32.dll中函数的地址:GetProcAddress工作正常 但是Windows为32位和64位应用程序提供了不同的kernel32.dll(或映射到应用程序地址空间中不同地址的lib,我不知道确切情况)。 而32位应用程序中的WinAPI函数的地址与64位应用程序中的不同 如何使用32位应用程序从64位kernel32.d
64位Windows(WOW64)上的32位应用程序。
我需要从kernel32.dll
中知道几个WinAPI
函数的地址
A可以很容易地获取32位kernel32.dll中函数的地址:GetProcAddress
工作正常
但是Windows为32位
和64位
应用程序提供了不同的kernel32.dll
(或映射到应用程序地址空间中不同地址的lib,我不知道确切情况)。
而32位
应用程序中的WinAPI
函数的地址与64位
应用程序中的不同
如何使用32位
应用程序从64位
kernel32.dll
获取函数地址?
我不想仅仅为了知道所需函数的地址而启动单独的64位进程。我认为这个问题没有意义。由于ASLR,您只能询问“当DLL加载到我的进程(*)中时函数的地址是什么”,而不能将64位DLL加载到32位进程中
(*)在特定引导后运行的每个进程的当前答案可能是相同的,但我打赌API为每个进程的kernel32.dll
支持不同的地址
(当然,64位的值可能比32位指针的值大得多。)kernel32不受ASLR约束。它在系统范围内具有相同的基址:同意,但我的观点是GetProcAddressAPI(以及类似的)不会公开该细节。“相同的基址系统范围”是我试图用“特定引导后运行的每个进程都相同”来表达的。启动一个单独的64位进程,然后完成它。可能这对您也没有帮助,因为您无法从32位进程在64位进程中创建远程线程。我想这就是你想要做的。谢谢你的帮助。我不知道CreateRemoteThread在x32->x64中总是失败。不管怎样,您都需要一个64位注入器,所以我想这就是您的答案是的,我得到了相同的结论)从二进制文件导出的符号的RVA(相对虚拟地址)是一个常量,在编译时已知。模块的RVA+HINSTANCE==地址(HINSTANCE与HMODULE相同)。