我正在开发一个在进程启动时注入dll的应用程序(挂起->注入-->恢复)--在DllMain中第一次调用DLL_PROCESS_ATTACH (在注入的dll中)就是调用MessageBox() (只是为了调试目的)。但是,这个对MessageBox()的调用有时会弹出一个错误并使注入的进程崩溃。
运行时错误! 程序: C:\Program \Microsoft Office\Office14\OUTLOOK.EXER6030
例如,这与Outlook和Winword是可重复的。虽然记事本,IE,CMD,Calc和许多其他-打印消息框,并继续正常。
打印消息框对我来说不是必须的,所以我只想检查CRT是否已经完成初始化,所以我可以像这样继续正常运行:
case DLL_PROCESS_ATTACH:
if (IsCRTInitialized())
MessageBox(...);如果缺少什么信息,请告诉我。谢谢!
发布于 2011-11-22 12:45:28
当调用入口点函数DLLMain时,Kernel32.dll保证加载到进程地址空间中。MessageBox驻留在user32.dll中,根据来自的创建DLL的最佳实践调用函数,是一个严格的no-no。
你可以
发布于 2011-11-22 11:49:33
问题不在于CRT。您不允许从MessageBox调用DllMain或任何其他非平凡的函数。
https://stackoverflow.com/questions/8226259
复制相似问题