所以我有一個應用程序啓動另一個應用程序與我的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)
{
}
感謝