DllMain中不当操作导致死锁问题的分析
文章平均质量分 86
DllMain中不当操作导致死锁问题的分析
breaksoftware
这个作者很懒,什么都没留下…
展开
-
DllMain中不当操作导致死锁问题的分析--死锁介绍
最近在网上看到一些关于在DllMain中不当操作导致死锁的问题,也没找到比较确切的解答,这极大吸引了我研究这个问题的兴趣。我花了一点时间研究了下,正好也趁机研究了下进程对DllMain的调用规律。因为整个研究篇幅比较长,我觉得还是分开写比较能突出重点。本文先说说死锁。(转载请指明出于breaksoftware的csdn博客) 介绍死锁之前,我说一个我小时候听过的一...原创 2012-11-02 23:50:31 · 3793 阅读 · 1 评论 -
DllMain中不当操作导致死锁问题的分析--进程对DllMain函数的调用规律的研究和分析
不知道大家是否思考过一个过程:系统试图运行我们写的程序,它是怎么知道程序起始位置的?很多同学想到,我们在编写程序时有个函数,类似Main这样的名字。是的!这就是系统给我们提供的控制程序最开始的地方(注意这儿是提供给我们的,而实际有比这个还要靠前的main)。于是看到DllMain就可以想到它是干嘛的了:Dll的入口点函数。那何时调用这个函数的呢?以及各种调用场景都传给了它什么参数呢...原创 2012-11-02 23:50:53 · 6088 阅读 · 1 评论 -
DllMain中不当操作导致死锁问题的分析--导致DllMain中死锁的关键隐藏因子
有了前面两节的基础,我们现在切入正题:研究下DllMain为什么会因为不当操作导致死锁的问题。首先我们看一段比较经典的“DllMain中死锁”代码。(转载请指明出于breaksoftware的csdn博客)//主线程中HMODULE h = LoadLibraryA(strDllName.c_str()); // DLL中代码static DWORD WINA...原创 2012-11-05 21:27:45 · 7234 阅读 · 6 评论 -
DllMain中不当操作导致死锁问题的分析--导致DllMain中死锁的关键隐藏因子2
本文介绍使用Windbg去验证《DllMain中不当操作导致死锁问题的分析--导致DllMain中死锁的关键隐藏因子》中的结论,调试对象是文中刚开始那个例子。(转载请指明出于breaksoftware的csdn博客) 1 g 让程序运行起来 2 ctrl+break 中断程序 3 ~ 查看线程数 其实该程序自己运行起来原创 2012-11-05 22:52:01 · 3826 阅读 · 8 评论 -
DllMain中不当操作导致死锁问题的分析--DisableThreadLibraryCalls对DllMain中死锁的影响
《windows核心编程》作者在讨论DllMain执行序列化的时候,曾说过一个他的故事:他试图通过调用DisableThreadLibraryCalls以使得新线程不在调用DllMain从而解决死锁问题。但是该方案最后失败了。思考作者的思路,他可能一开始认为:因为线程要调用DllMain而加锁,于是windows在发现DllMain不用调用时就不用加锁了。本文将探讨DisableT...原创 2012-11-07 20:00:14 · 8477 阅读 · 6 评论 -
DllMain中不当操作导致死锁问题的分析--加载卸载DLL与DllMain死锁的关系
前几篇文章一直没有在源码级证明:DllMain在收到DLL_PROCESS_ATTACH和DLL_PROCESS_DETACH时会进入临界区。这个论证非常重要,因为它是使其他线程不能进入临界区从而导致死锁的关键。我构造了在DLL被映射到进程地址空间的场景,请看死锁时加载DLL的线程的堆栈(转载请指明出于breaksoftware的csdn博客) 如果仔细看过《...原创 2012-11-08 19:17:47 · 4861 阅读 · 2 评论 -
DllMain中不当操作导致死锁问题的分析--线程退出时产生了死锁
我们回顾下之前举得例子(转载请指明出于breaksoftware的csdn博客) case DLL_PROCESS_ATTACH: { printf("DLL DllWithoutDisableThreadLibraryCalls_A:\tProcess attach (tid = %d)\n", tid); HANDLE h...原创 2012-11-08 20:06:41 · 4515 阅读 · 0 评论 -
DllMain中不当操作导致死锁问题的分析——线程中调用GetModuleFileName、GetModuleHandle等导致死锁
之前的几篇文章已经讲解了在DllMain中创建并等待线程导致的死锁的原因。是否还记得,我们分析了半天汇编才知道在线程中的死锁位置。如果对于缺乏调试经验的同学来说,可能发现这个位置有点麻烦。那么本文就介绍几个例子,它们会在线程明显的位置死锁掉。(转载请指明出于breaksoftware的csdn博客) DLL中的代码依旧简单。它获取叫EVENT的命名事件,然后等待这...原创 2012-11-09 19:48:43 · 6385 阅读 · 0 评论 -
DllMain中不当操作导致死锁问题的分析——DllMain中要谨慎写代码(完结篇)
之前几篇文章主要介绍和分析了为什么会在DllMain做出一些不当操作导致死锁的原因。本文将总结以前文章的结论,并介绍些DllMain中还有哪些操作会导致死锁等问题。(转载请指明出于breaksoftware的csdn博客) DllMain的相关特性 首先列出《DllMain中不当操作导致死锁问题的分析--进程对DllMain函数的调用规律的研究和分...原创 2012-11-09 20:35:24 · 9842 阅读 · 10 评论