Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用32位应用程序从64位kernel32.dll获取函数地址_C++_Winapi_64 Bit_32 Bit_Getprocaddress - Fatal编程技术网

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相同)。