首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在dllmain中调用MessageBox

如何在dllmain中调用MessageBox
EN

Stack Overflow用户
提问于 2011-12-05 02:27:30
回答 2查看 5.4K关注 0票数 4

我正在创建一个用于dll注入POC (概念验证)的小DLL。我使用的是codeblocks的c++ ide。

我的dll的main (dllmain)看起来像这样:

代码语言:javascript
复制
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
    MessageBox(0, "myfirstdll loaded", "SUCCESS STATUS", MB_OK);
    switch (fdwReason)
    {
        case DLL_PROCESS_ATTACH:
            // attach to process
            // return FALSE to fail DLL load
            break;
        case DLL_PROCESS_DETACH:
            // detach from process
            break;

        case DLL_THREAD_ATTACH:
            // attach to thread
            break;

        case DLL_THREAD_DETACH:
            // detach from thread
            break;
    }
    return TRUE; // succesful
}

现在,当我从客户端程序(希望是空的,它加载了!)加载动态链接库(使用LoadLibrary)时,我的消息框不会弹出。这是相当令人沮丧的,因为我正在做poc。我知道在dllmain中处理kernel32.dll等密集型业务时普遍存在的安全问题,但我这里的问题并不是安全性;我只需要在dllmain中弹出一个消息框。

那么,如何在加载dll时弹出消息框呢?

EN

回答 2

Stack Overflow用户

发布于 2011-12-05 02:41:21

See this question阅读有关DllMain中大量限制的内容。这不仅仅是安全问题。user32导出的任何内容都属于这一类。

换句话说,您不能在DllMain中使用MessageBox。改为使用kernel32中的OutputDebugString,它不显示任何UI。

票数 6
EN

Stack Overflow用户

发布于 2011-12-05 02:42:07

有很多有用的东西在DllMain中是做不到的。有关更多信息,请阅读Raymond Chen's blog中的所有相关文章。使用SetTimer甚至不能延迟执行,因为该函数在user32.dll中,而该库可能还没有装入。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8377569

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档