我有一个静态库,可以链接到a .exe或a .dll.在运行时,我希望我的库函数可以获取HMODULE静态库代码链接到的任何内容.
我目前使用以下技巧(灵感来自此论坛):
const HMODULE GetCurrentModule()
{
MEMORY_BASIC_INFORMATION mbi = {0};
::VirtualQuery( GetCurrentModule, &mbi, sizeof(mbi) );
return reinterpret_cast<HMODULE>(mbi.AllocationBase);
}
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来做这个看起来不那么hacky?
(注意:这样做的目的是加载一些我知道我的用户将与我的静态库同时链接的Win32资源.)
好吧,我正在使用CreateRemoteThread/LoadLibrary "技巧" 将一些代码注入另一个进程.
我最终得到了一个线程ID,并且我选择了一个带有我选择的DLL的进程.至少在理论上,DLL目前什么都不做,因此验证这有点棘手.暂时我愿意仅靠信仰接受它.此外,在我朝这个方向努力之前,需要回答这个问题.
基本上,你不能阻止DllMain.但是,所有我必须与远程线程进行通信的是它的id.这实际上是为了阻止PostThreadMessage/GetMessage的恶作剧.我可以在DllMain中启动另一个线程,但我无法将其id传回给创建线程,也无法将另一个线程的id传递给远程线程.
简而言之,如果我在一个过程中创建一个远程线程,我该如何与原始进程通信?