存档

文章标签 ‘死锁’

SDK控件子类化和栈溢出

2011年10月26日 2 条评论

不知道起个什么题目好,所以就叫做“SDK控件子类化和栈溢出”吧!为了节约时间你可以只看本文最后一段话!颓废了一段时间之后,终于有点激情写代码了,写一个小工具,为了给Static控件做成超链接的形式,于是用了控件子类化,不幸的是程序Crash了。
为什么会Crash呢?于是赶紧在Visual Studio下Debug模式调试(本来也应该这样,不过前面提到VS2008链接器有个Bug【见Microsoft Increment Linker已停止工作】,下个有个朋友评论说打SP1补丁,考虑到C盘空间严[......]

继续阅读

DllMain多线程死锁

2011年10月11日 4 条评论

在调试中遇到的一种死锁情况——DllMain死锁。DllMain是可选择的DLL入口指针,当进程和线程启动和终止时被系统调用,分别进行创建资源和释放资源等操作;而且也可以在DLL被装载进进程空间时(即DllMain响应DLL_PROCESS_ATTACH通知时)创建线程,在DLL从进程空间卸载时(即DllMain响应DLL_PROCESS_DETACH通知时)结束线程。但是在DllMain对创建或结束进程需要特别注意DllMain的序列化调用规则,使用不当将会造成死锁。下面是参考《Windows[......]

继续阅读

分类: 逆向调试 标签: , , ,

HeapAlloc引起的死锁

2011年10月10日 没有评论

在《Windows高级调试》一书中提到了HeapAlloc有可能造成死锁的一种情况:主线程创建一个工作者线程,在工作者线程中使用HeapAlloc在进程的默认堆上分配一块内存,这时候在主线程中调用TerminateThread结束工作者线程,同时在主线程中使用HeapAlloc来在进程的默认堆上分配一块内存,这时候有可能死锁。
但是这样的情况是非常少见的,书中也提到了。书中提到RtlAllocateHeap会试图进入一个临界区。查阅MSDN对HeapAlloc的解释,可以看到如下一段:
Seri[......]

继续阅读

分类: 逆向调试 标签: ,

同步(死锁)调试基础

2011年10月8日 2 条评论

同步问题最常见的表现就是死锁(如果你是从搜索引擎搜索“死锁”进来的,我推荐你点击这个链接看看下面的文章),要调试程序的这类情况需要先了解一下同步相关的一些基础知识(如事件、信号量、临界区、互斥体等)以及Windbg中处理同步问题相关的常见命令(如!handle、!cs、!runaway等命令)。掌握好这些调试基础之后,就可以进行一些实例调试来获取调试经验了。
!handle命令
!handle命令可以列出进程中所有的句柄(包括None[未归类]、Event、Section、File 、Direc[......]

继续阅读

分类: 逆向调试 标签: , ,