所以我有一个应用程序启动另一个应用程序与我的DLL注入(与Detours)。入口点是DllMain。我不能从DllMain那里做很多事情,当然也不能循环。那么我该如何每x秒调用一次DLL监视器函数呢?我读过你不能从DllMain创建一个线程(至少在它返回之前),因为它让我崩溃了。所以我尝试在附加线程事件中创建它,并使我崩溃。所以现在我想要做的就是再次注入它(因为Detours失败),所以我可以得到模块句柄。然后我得到一个初始化函数的地址,它创建了我的线程。我得到的模块句柄很好,但我不认为我可以得到函数地址。我让这个功能空了,它仍然让我崩溃。所以它甚至不会调用函数。 Visual Studio说我没有阅读权限。里面注入DLL到循环?
那么我想要做什么?当你不拥有附加程序(exe)时,你如何循环你的DLL函数。
//Application.exe
STARTUPINFO si = {sizeof(STARTUPINFO)};
PROCESS_INFORMATION pi = {0};
DetourCreateProcessWithDll(filename, NULL, NULL, NULL, TRUE,
CREATE_DEFAULT_ERROR_MODE | CREATE_SUSPENDED, NULL, path,
&si, &pi, detoured, hook, NULL);
processID = pi.dwProcessId;
hDll = InjectDLL(processID, hook);
if(hDll != NULL)
{
STARTER Starter = (STARTER)GetProcAddress(hDll, "Starter");
if(Starter != NULL)
Starter();
}
ResumeThread(pi.hThread);
函数Starter是extern C导出的,看起来很好检查(它是序数1)。
我不知道什么可能是错误的,只是希望有人在那里有经验与这个话题和崩溃。
这里是DLL的代码:
//Hook.h
extern "C"
{
void __declspec(dllexport) Starter(void);
}
//Hook.cpp
void Starter(void)
{
}
感谢