windbg 调试
文章平均质量分 92
maomao171314
这个作者很懒,什么都没留下…
展开
-
临界区死锁和死循环
1.临界区使用CRITICAL_SECTION 结构来保证不会有多个线程重入被保护的代码段实现在用户态的同步机制,相对内核对象来说,开销更小适用于同步同一进程内的多个线程如:CRITICAL_SECTION g_cs;EnterCriticalSection(&g_cs);//以原子方式访问共享资源LeaveCriticalSection(&g_cs);RTL_CRITICAL_SECTION 结构如下:struct RTL_CRITICAL_SECT原创 2022-01-07 14:20:07 · 857 阅读 · 0 评论 -
WinDbg Tutorial
原文:http://blog.csdn.net/kofshower/article/details/5888810Windows Debuggers: Part 1: A WinDbg TutorialOriginal Article:Windows Debuggers: Part 1: A WinDbg Tutorial http://www.codeproject.co转载 2014-08-01 17:11:59 · 776 阅读 · 0 评论 -
使用CDB和NTSD开始调试旅程
介绍 在软件开发和维护的过程中,调试是最有具有价值的技能之一,它几乎被用在产品生命周期的每个阶段。首先,开发人员很明显会遇到很多错误。这些错误多种多样,有逻辑错误、语法错误、编译器方面的错误等等。其次,当测试更多的高级的情况或当软件在和其他环境交互的时候,质量保证部门人员可能会遇到困难。最后,产品发布之后,公司必须对它提供一些支持。顾客拿到软件产品之后,调试并没有结束,错误通常都会升级,并被转载 2014-07-31 14:46:00 · 1112 阅读 · 0 评论 -
栈
介绍 欢迎来到这一系列教程的第二篇。在这篇文章,我们将探讨一些关于栈的问题和它在调试中的作用。每当你问别人”如果程序出现错误了该怎么办?”,最常见的回答就是”看栈回溯”。这是很对的,当你分析一个CrashDump的时候,你要做的第一件事就是得到当时的栈回溯。 栈是什么? 这是第一个,也是非常明显的一个问题。不幸的是,在上一篇文章中,我并没有回答这个问题,因为我想当然的以为每个人转载 2014-07-31 14:46:58 · 601 阅读 · 0 评论 -
堆
介绍 在这个调试系列的前一章节我们学习了栈。栈是一个临时存储的区域,用于存储局部变量,参数,返回地址和其它一些编译器需要的东西。在这一篇当中,我们将学习用户态下的堆。 堆是什么? 堆就是当程序需要时,进程空间中用来提供的一大块内存。当需要时,系统API会分配一块内存,然后在每块内存地址前加上一个头部,表示这块地址当前正在使用以及它的大小。然后当需要释放这些内存时,系统会以这个为转载 2014-07-31 14:50:07 · 513 阅读 · 0 评论 -
编写WinDbg扩展
介绍 欢迎来到这个调试系列的第4篇。在这篇中,我们会稍微偏离一点实际的调试,而去研究一下对调试有帮助的东西。我绝对不会为了写调试扩展而去写,写这些东西必须要有一些原因,否则会变得很乏味。一旦你觉得你很愿意去做这件事,那将会是自然而然的事情。 在我进行调试的时候,我总是去检查栈和其他地方来寻找某些字符串。为什么我要这样做呢?我们不是电脑,我们懂语言,而不是数字。而许多程序甚至驱动程序都是转载 2014-07-31 14:48:19 · 802 阅读 · 0 评论 -
句柄泄露
介绍 欢迎来到这个调试教程系列的第5篇。在这篇文章,我们会介绍Windows中的句柄,什么是句柄以及怎么调试句柄泄露。在读这篇文章之前,我希望你对前4篇文章掌握的都还不错。这一系列的文章并不是在重复WinDbg/NTSD的帮助文件,而是介绍实实在在的问题,它们是怎么一回事,以及如何解决它们。 什么是句柄 对于一个程序来说,句柄就是设备,文件,或其它一些系统对象或资源的实例。程序转载 2014-07-31 14:51:10 · 4016 阅读 · 0 评论 -
使用内核调试器
介绍 在这篇教程中,我们将会讲述内核调试器的几个基本特性,然后去掌握它。很明显,我们不能涉及到方方面面,所以我们只会概括到其中几个方面,然后让你熟悉调试器的使用。我希望这篇文章能对你有帮助。 设置 为了设置内核调试器,你需要像第一章那样修改BOOT.INI文件。/DEBUG /DEBUGPORT=COM1 /BAUDRATE=115200是我们需要设置的选项。如果你不设置速度,转载 2014-07-31 14:49:21 · 3256 阅读 · 0 评论 -
锁和同步对象
介绍 欢迎来到这个系列的第7篇。在这部分中,我们将学习一些关于锁和同步对象的知识。在这篇教程中,我们会稍作改变,我们将同时使用用户态调试器和内核态调试器。这样我们就能更好的了解他们。 什么是死锁 这是多线程中最基本的一个问题。当一个线程因为一个对象的无限期锁住,永远不可能得到一个资源,比如临界区,锁,或其他种类的同步对象,这就造成了死锁。最简单的例子就是有两个线程,两个锁,锁A转载 2014-07-31 14:52:11 · 743 阅读 · 0 评论