什么是HMODULE?

Blo*_*ood 14 c++ winapi

我没什么问题.我已经将DLL加载到进程中(它不是我的),我必须在其中使用函数.我有这个功能的偏移,所以我只需要获取DLL地址并将其添加到偏移量以获得该功能.GetModuleHandle()返回HMODULE变量,但实际上我不知道是什么HMODULE.它是加载DLL的地址还是某种其他标记?

如果它不是加载DLL的地址,我怎么能得到这个地址?我希望我能说清楚.

Len*_*ate 12

你提出的方法将正常工作.

您似乎已将dll注入目标进程,并希望从注入dll的进程中获取目标进程中该dll中函数的地址.

我假设您还在将dll注入目标进程的进程中加载​​了dll,并且您希望在目标进程中创建远程线程并让它在目标进程中执行目标函数.

由于您注入的dll可能不会像在注入过程中那样在目标进程中的同一地址加载,因此您不能简单地使用在注入过程中从函数调用GetProcAddress获得的地址.

HMODULE只是DLL的基址(有关详细信息,请参阅此答案).因此,您可以在注入过程中获取dll的HMODULE,并从函数上的GetProcAddress返回的地址中减去它.然后,您可以将目标进程中注入的dll的HMODULE添加到此偏移量,以获取目标进程中注入的dll中目标函数的地址.假设此函数具有正确的签名,则将其作为线程函数传递给您的调用以创建远程线程,并且您现在正在目标进程中运行目标函数.

我在这个答案中更详细地解释了这一点.