里面注入的DLL循环在哪里?

时间:2009-06-21 09:01:46

标签: c++ multithreading dll loops detours

所以我有一个应用程序启动另一个应用程序注入我的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)
{

}

由于

0 个答案:

没有答案
相关问题