首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检测CRT初始化是否在注入过程中完成

检测CRT初始化是否在注入过程中完成
EN

Stack Overflow用户
提问于 2011-11-22 11:47:15
回答 2查看 1K关注 0票数 3

我正在开发一个在进程启动时注入dll的应用程序(挂起->注入-->恢复)--在DllMain中第一次调用DLL_PROCESS_ATTACH (在注入的dll中)就是调用MessageBox() (只是为了调试目的)。但是,这个对MessageBox()的调用有时会弹出一个错误并使注入的进程崩溃。

运行时错误! 程序: C:\Program \Microsoft Office\Office14\OUTLOOK.EXER6030

  • CRT未初始化

例如,这与Outlook和Winword是可重复的。虽然记事本,IE,CMD,Calc和许多其他-打印消息框,并继续正常。

打印消息框对我来说不是必须的,所以我只想检查CRT是否已经完成初始化,所以我可以像这样继续正常运行:

代码语言:javascript
复制
case DLL_PROCESS_ATTACH:
     if (IsCRTInitialized())
        MessageBox(...);

如果缺少什么信息,请告诉我。谢谢!

EN

回答 2

Stack Overflow用户

发布于 2011-11-22 12:45:28

当调用入口点函数DLLMain时,Kernel32.dll保证加载到进程地址空间中。MessageBox驻留在user32.dll中,根据来自创建DLL的最佳实践调用函数,是一个严格的no-no。

你可以

  1. 为任何调试器跟踪调用OutputDebugString。此函数位于kernel32.dll中,应该可以安全地调用。
  2. 在应用程序加载任何其他dll之前,请自己调用MessageBox。这将确保user32.dll及其依赖项已经加载。这样,调用MessageBox in DllMain可能有更好的成功机会。但你的里程可能不一样。
票数 3
EN

Stack Overflow用户

发布于 2011-11-22 11:49:33

问题不在于CRT。您不允许从MessageBox调用DllMain或任何其他非平凡的函数。

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

https://stackoverflow.com/questions/8226259

复制
相关文章

相似问题

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