所以我有一个应用程序启动另一个应用程序注入我的DLL(使用Detours)。入口点是DllMain。我无法从DllMain做很多事情,当然也无法循环。那么如何每隔x秒调用我的DLL监视器功能呢?我读过你不能从DllMain创建一个线程(至少在它返回之前)并且它是真的因为它让我崩溃了。所以我尝试在附加线程事件中创建它,它让我崩溃了。所以现在我要做的就是再次注入它(包括Detours失败)所以我可以得到模块句柄。然后我得到一个创建我的线程的初始化函数的地址。我得到模块句柄很好,但我认为我不能得到函数地址。我把这个功能弄空了,它仍然让我崩溃了。所以它甚至没有调用函数。 Visual Studio说我没有读取权限。
那我该怎么办?当你没有附加的程序(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)
{
}
由于