【问题标题】:DllMain not being calledDllMain 没有被调用
【发布时间】:2010-10-24 04:15:09
【问题描述】:

我有一个这样定义的 DllMain:

BOOL APIENTRY DllMain( HMODULE hModule,
                   DWORD  ul_reason_for_call,
                   LPVOID lpReserved
                 )
{ 

int i=0, DoHijack=0;

switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
    hMod = hModule;
    hProcessCenter = ::FindWindow(NULL, _T("Form1"));

    ExtractPaths(hModule, ExePath, &kNTIExeName, kNTIDllPath, &kNTIDllName);

    //Only hook target processses
    for(i=0; i < NB_TARGETS; i++)
    {
        if(strstr(kNTIExeName, Targets[i]))
            DoHijack=1;
    }

    if(DoHijack)
    {
            DetourTransactionBegin();
        DetourUpdateThread(GetCurrentThread());
        DetourAttach(&(PVOID&)Real_DrawText, Mine_DrawText); // <- magic
        DetourAttach(&(PVOID&)Real_ExtTextOut, Mine_ExtTextOut); 
        DetourTransactionCommit();
    break;   
    }      

case DLL_THREAD_ATTACH:
        break;
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
        DetourTransactionBegin(); 
        DetourUpdateThread(GetCurrentThread());
        DetourDetach(&(PVOID&)Real_DrawText, Mine_DrawText);
        DetourDetach(&(PVOID&)Real_ExtTextOut, Mine_ExtTextOut); // <- magic
        DetourTransactionCommit();
    break;
}
return TRUE;
 }

这是我从工作中买回家的一个项目,在我编译并运行它之后,dllmain 永远不会被调用,因此我的问题是 process_attach 开关永远不会被击中。什么可能导致这种情况发生?编译器中的某些东西,链接选项之一?

dll 完美运行...

谢谢。

【问题讨论】:

  • 你在DllMain里面做什么?可以发一些代码吗?
  • 你如何“运行” DLL?
  • 您为哪家公司工作的公司提供隐藏 DLL 的产品?这是恶意的,投票关闭。

标签: c++ visual-studio-2008 dll


【解决方案1】:

您不能“运行”DLL。也许您已经将它构建为一个可执行项目,DllMain 对它没有特殊意义。

【讨论】:

  • 对不起,只是选词不当,编译为dll。正如我所说,当我在我的工作计算机上而不是在家里编译它时一切正常,我认为其中一个编译设置是不同的,我想知道是否有人知道哪一个......
【解决方案2】:

今天早上用新的眼光看它,意识到正在调用 dllmain,但实际上我在检查 NBTargets 值之一中犯了一个错误,这就是我的代码没有触发的原因......

回到它...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-11
    • 2013-06-20
    相关资源
    最近更新 更多