首先,参看这篇文章:http://msdn.microsoft.com/en-us/library/windows/desktop/dn633971%28v=vs.85%29.aspxloadlibrary时,会先加锁,然后调用dllmain,然后解锁返回。所以dllmain中,要做的初始化或清理越简单越好。该做的复杂的初始化,应该延迟,在loadlibrary之后。不能..
分类:
其他好文 时间:
2015-02-12 02:03:47
阅读次数:
163
(转载于breaksoftware的csdn博客)之前的几篇文章已经讲解了在DllMain中创建并等待线程导致的死锁的原因。是否还记得,我们分析了半天汇编才知道在线程中的死锁位置。如果对于缺乏调试经验的同学来说,可能发现这个位置有点麻烦。那么本文就介绍几个例子,它们会在线程明显的位置死锁掉。 ...
分类:
编程语言 时间:
2015-02-02 22:47:28
阅读次数:
292
(转载于breaksoftware的csdn博客)我们回顾下之前举得例子caseDLL_PROCESS_ATTACH:{printf("DLLDllWithoutDisableThreadLibraryCalls_A:\tProcessattach(tid=%d)\n",tid);HANDLEhTh...
分类:
编程语言 时间:
2015-02-02 22:45:59
阅读次数:
279
(转载于breaksoftware的csdn博客)不知道大家是否思考过一个过程:系统试图运行我们写的程序,它是怎么知道程序起始位置的?很多同学想到,我们在编写程序时有个函数,类似Main这样的名字。是的!这就是系统给我们提供的控制程序最开始的地方(注意这儿是提供给我们的,而实际有比这个还要靠前的ma...
分类:
系统相关 时间:
2015-02-02 22:43:04
阅读次数:
268
(转载于breaksoftware的csdn博客)本文介绍使用Windbg去验证《DllMain中不当操作导致死锁问题的分析--导致DllMain中死锁的关键隐藏因子》中的结论,调试对象是文中刚开始那个例子。 1 g 让程序运行起来 2 ctrl+break 中断程序 3 ~ 查看...
分类:
其他好文 时间:
2015-02-02 22:40:18
阅读次数:
189
当我在窗体初始化的时候,调用了一个外部的dll,它就不知什么原因的 抛出一个“正试图在 os 加载程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化函数内运行托管代码”的异常,程序就卡掉了,在网上查了查,相关说明如下:.NET2.0中增加了42种非常强大的调试助手,MDA.Loaderl...
分类:
其他好文 时间:
2015-01-31 21:50:26
阅读次数:
232
DLL程序入口点函数:DllMain,注意:大小写是区别的(仅导出资源的DLL可以没有DllMain函数)。函数原型:BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, ...
分类:
其他好文 时间:
2015-01-13 12:07:22
阅读次数:
201
当创建DLL项目时,尤其是一些资源转化成dll时,其不要dllmain()时,会出现:error LNK2001: 无法解析的外部符号 _DllMainCRTStartup@12 错误。
解决办法:右击,项目属性-->连接器-->高级-->无入口点:改成 是。
/NOENTRY 选项是创建纯资源DLL所必需的。使用此选项可防止LINK将对_main的引用链接到DLL。
...
分类:
其他好文 时间:
2014-12-05 10:57:40
阅读次数:
162
Windows在加载DLL的时候,需要一个入口函数,就如同控制台或DOS程序需要main函数、Win32程序需要WinMain函数一样。一些例子中,DLL并没有提供DllMain函数,应用工程也能成功引用DLL,这是因为Windows在找不到DllMain的时候,系统会从其它运行库中引入一个不做任何...
分类:
其他好文 时间:
2014-11-27 12:32:10
阅读次数:
268
在Windows中,让程序模块化实现的一种方式,就是让其实现为动态链接库。然后在主程序启动的时候隐式或者显示的去加载动态链接库。但是如果不恰当的编写动态链接库的DllMain函数,将会引起意想不到的Bug哦,比如典型的Loader Lock死锁问题。这不,我们产品中就碰到了一个由于Loader Lock而引起的Bug....
1. 背景介绍
当主程序在启动的时候,隐式或者显...
分类:
其他好文 时间:
2014-10-13 17:35:40
阅读次数:
403