随笔分类 -  Windows调试技术

摘要:The segmentation and paging mechanisms provide in the support a wide variety of approaches to memorymanagement. When segmentation and paging are combi... 阅读全文
posted @ 2015-03-11 22:28 SolidMango 阅读(459) 评论(0) 推荐(0) 编辑
摘要:Windbg脚本和扩展工具之一STL容器扩展命令--by solidmango想写一篇关于windbg的STL容器扩展命令的文章已经有一段时间了,但是最近项目比较忙,再加上有几本书特别想读,所以就耽误下来了,以至于整个三月都没来得及写,今天终于有时间可以把这篇文章写完。至于windbg和STL都是什么在这里我就不细说了,能打开我这篇文章的想必都是行家,那么我为什么想写着么一个主题的文章呢?STL容器在调试的时候内部实现相对来说还是比较复杂的,而在某些生产情况下和一些极端的问题分析的时候visual studio 是登不了大雅之堂的,当然我不是说vs不好,在很多时候他是神器,但是它不是万能的。举 阅读全文
posted @ 2013-04-01 21:53 SolidMango 阅读(2515) 评论(1) 推荐(3) 编辑
摘要:抓取user mode dump文件的几重境界导读记得去年对一些朋友说过要写一些调试技术相关的文章,但是后来出于种种原因吧,还是没写成。最近终于有些时间,希望可以把这些文章补上。对于软件开发而言,调试无疑是最重要的部分之一,而对于windows 系统而言,dump文件无疑是问题发生时最全面的信息,对于一些问题而言,在对的时候抓取对的.dump文件基本上就相当于解决了一大半的问题。本文由浅入深的介绍了用户模式下抓取.dump文件的几种方式,希望对日夜奋战在加班线上的朋友有所帮助。入门级-目标是问题发生的时候手动可以抓到dump文件1. 当问题发生的时候使用windbg attach 到相关的进程 阅读全文
posted @ 2013-02-18 20:37 SolidMango 阅读(3539) 评论(2) 推荐(4) 编辑
摘要:使用Windbg 调试分析代码 ---从.cmdtree命令的积累开始一提到windbg很多人心里就有些畏难情绪,也难怪,这东西虽然是神器,对一个新手来说使用起来确实有些不方便,而且命令太多,很难一下子都记住,最近发现一个好方法,分享出来,希望大家可以通过这个方法开个好头。使用windbg第一关就是要记住一堆的命令,其实老外也不会记住所有的命令,哪怕是高手,也就那常用的几十个,最多不超过几百个命令。Windbg里面有一个功能,说是功能不如说是原命令.cmdtree,使用这个命令,我们可以将常用的命令记录起来,然后以图形界面的方式选择执行,这样地新手... 阅读全文
posted @ 2012-12-17 18:43 SolidMango 阅读(2685) 评论(5) 推荐(2) 编辑
摘要:Windbg脚本和扩展工具开篇好长一段时间没写文章了,最近一直忙于为项目的可调式性做一些脚本和扩展工具,鉴于对windbg强大威力的震撼,以及相对较少的资料,笔者决定写一系列关于如何开发Windbg脚本和扩展命令的文章,您的支持是我最大的动力,希望本系列文章对您有所帮助。那么一个完整的windbg script是什么样子的呢?首先让我们看如下示例:$$ 该脚本是列出用户进程和栈r$t0=nt!PsActiveProcessHead.for(r$t1=poi(@$t0);(@$t1!=0)&(@$t1!=@$t0);r$t1=poi(@$t1)){r?$t2=#CONTAINING_RE 阅读全文
posted @ 2012-11-30 17:42 SolidMango 阅读(2214) 评论(6) 推荐(2) 编辑
摘要:用惯了Vsiual Studio的兄弟们可能会因为先入为主的原因以为所有的调试器都应该像它那样,其实不然,当你安装Debugging Tools for Windows的时候,你将发现有两个系列的工具,一系列32位的工具和一系列64位的工具。这让人觉得和费解,因为在我们安装Microsoft Visual Studio的时候你根本不需要考虑32位还是64位。如果你正使用windbg调试工具集(WinDbg, KD, CDB, or NTSD)中的一个,你必须得自己做出选择。为了选择合适的调试工具,你需要知道以下两点:1. 你的调试主机的处理器类型。2. 你的调试主机运行的是32位版本的wind 阅读全文
posted @ 2012-11-16 09:40 SolidMango 阅读(8898) 评论(4) 推荐(2) 编辑
摘要:PowerDbg:PowerDbg is a PowerShell library that enables you to easily create PowerShell scripts to automate a WinDbg / CDB debugging session. You can use PowerDbg for Kernel Mode or User Mode, Post-Mortem debugging or Live Debugging and for native or managed code.PowerShell has several advantages ove 阅读全文
posted @ 2012-11-15 17:30 SolidMango 阅读(498) 评论(0) 推荐(0) 编辑
摘要:Special Command—Advanced Programming Techniques for WinDbg Scriptsrafarah Microsoftlink:http://blogs.msdn.com/b/debuggingtoolbox/archive/2009/01/31/special-command-advanced-programming-techniques-for-windbg-scripts.aspx11,545 Points 3 3 2 Recent Achievements New Blog Rater Blog Commentator II Blog P 阅读全文
posted @ 2012-11-14 07:53 SolidMango 阅读(772) 评论(0) 推荐(0) 编辑
摘要:Windows程序员进阶应该看的那些书 业内有一个普遍的现象,一般Windows程序员在写了3-5年的代码的时候会有一段迷茫期,因为这个时期的程序员已经掌握了常用的一些编程技巧,对某种编程语言已经比较熟悉,可以完成常规的任务,但是这个时候的程序员也很容易迷茫。主要的表现有以下几种: 第一种,开始不停 阅读全文
posted @ 2012-11-08 20:53 SolidMango 阅读(6399) 评论(18) 推荐(4) 编辑
摘要:程序员请不要忽视调试技术 想写这篇文章已经很久了,但是一直不知道如何开始,因为调试技术这个东西本身不像编程语言,C++/C#这种简单的东西,大家想做些什么,查查类库,查查msdn,写出一些功能,皆大欢喜。 调试技术本身就很枯燥,如果没有一定定力的兄弟,看看可能就觉得犯困,没劲,没成就感。但是想想程序 阅读全文
posted @ 2012-11-07 22:01 SolidMango 阅读(3026) 评论(18) 推荐(5) 编辑
摘要:Windows 内存分析之路 How to use Resource Monitor 人之所以区别于动物就在于使用工具,同样,在某种程度上说,在正确的时候使用正确的工具,确实可以提高程序员的生产率。最近在网上看到一篇Resource Monitor的使用的文章,觉得对大家可能会有用处,于是把重点的部 阅读全文
posted @ 2012-11-05 10:28 SolidMango 阅读(7481) 评论(4) 推荐(2) 编辑
摘要:上次写了一篇文章,Windows代码heap内存分析实战 由于时间的关系,写的不是很详细,于是有朋友建议写的详细些,于是有了本文。Windows C++代码heap分析详解Windows代码占用的内存主要是堆和栈,其中栈内存又被称为自动内存,一般为系统自动管理,所以常见的问题主要发生在堆内存上。系统中如果分配了堆内存而不释放,或者错误释放,都会产生问题。首先来分析一下堆内存的主要结构:对于普通的堆:1. CreateHeap -> creates a _HEAP2. AllocHeap -> creates a _HEAP_ENTRY对于页堆 (gflags.exe /i +hpa 阅读全文
posted @ 2012-09-21 14:28 SolidMango 阅读(3041) 评论(2) 推荐(1) 编辑
摘要:Bcdedit 用法详解昨天写了一篇文章< Windows Server 2008 R2 如何启动kernel dbg进行双机内核调试『配置详解』>其中提及到Bcdedit,但是并没有对其进行详细的解释,作为续篇,本文对其用法发进行讨论。Bcdedit用于对vista及其以后版本的windows进行启动配置,当然内核调试的启动也是基于这个工具的。好吧,言归正传,开始对配置进行讨论。首先如果想对启动项进行配置必须得先加入一个boot entry, adding Boot Entry 过程如下,我们可以选择从当前的启动项拷贝一份,然后做些必要的改动,具体命令如下:bcdedit /co 阅读全文
posted @ 2012-07-25 16:04 SolidMango 阅读(1823) 评论(2) 推荐(1) 编辑
摘要:相信windbg大家都不陌生,其提供了一个异常强大的功能就是kernel dbg, 在不同版本的windows 系统中启动kernel dbg的方式不禁相同,为了方便大家使用kernel dbg,本文对Windows Server 2008 R2系统上如何对其进行配置进行了讨论。Kernel dbg 对于系统程序员尤为重要,特别是驱动开发,经常需要和kernel dbg打交道,另外好多涉及到系统的用户态问题也需要内核调试,其重要性不言而喻,希望本文给您的内核之旅开个好头。对于Windows XP 启动内核调试相对简单,只要在boot.ini中加上相应的启动项就可以启动kernel dbg 故在 阅读全文
posted @ 2012-07-24 16:52 SolidMango 阅读(2153) 评论(2) 推荐(0) 编辑
摘要:我为什么要学习C++反汇编 写在开始从6月7日开始到今天已经有5天了,在这5天的业余时间(工作之余)里终于系统的完成了C++反汇编的大部分问题的学习,今天写篇总结,算是对这几天学习的总结。首先我想说明的一个问题就是我为什么要花时间研究C++反汇编?这事得从笔者遇到的一个问题开始说起,大约2周前我们项目做在开发过程中遇到了一个Crash的问题,由于只有客户提供的一个.dmp文件,我们只能从这个地方入手,说起来很奇怪,从C++代码的角度根本看不出来问题,我找来了一个传说中的公司的大牛,大牛就在我面前给我详细的分析了一遍这个转储文件,感觉他看反汇编出来的代码就像看C++源代码一样,看问题也会更透彻, 阅读全文
posted @ 2012-06-11 18:04 SolidMango 阅读(6211) 评论(12) 推荐(8) 编辑
摘要:最近在分析C++ dump 文件的时候觉得有必要将一些必要的反汇编东西总结一下以备别人参考,自己有时间的时候也可以进行更多的改进。下面通过一个简单的C++代码转成汇编代码后的详细解释说明一下C++和汇编的对应关系,以及如何识别汇编代码中进行的一些操作的意义。代码的调用关系如下图所示:完整C++代码下:intInternalFunctionA(intnSizeA1,intnSizeA2){intlocalnSizeA1=nSizeA1;intlocalnSizeA2=nSizeA2;intnFunctionA=localnSizeA1+localnSizeA2;returnnFunctionA; 阅读全文
posted @ 2012-06-08 13:34 SolidMango 阅读(3807) 评论(12) 推荐(3) 编辑
摘要:上文说明了C++反汇编后的EBP,ESP寄存器都是做什么用的,相信大家已经有所了解,如果有没看过的请参考下文:http://www.cnblogs.com/pugang/archive/2012/05/25/2518499.html本文不会对其再做过多的讲解,如果还有问题,欢迎大家留言讨论。首先明确本文要解决的问题:在没有源代码的情况下如何看明白我们的汇编代码中哪些是局部变量。为了便于说明我将C++代码和汇编代码在一起,完整代码如下:intInternalFunctionA(intnSizeA1,intnSizeA2){00401000pushebp00401001movebp,esp0040 阅读全文
posted @ 2012-06-07 18:47 SolidMango 阅读(3039) 评论(0) 推荐(2) 编辑
摘要:详解C++代码反汇编后的堆栈寄存器EBP和ESP最近在分析一个进程崩溃的严重问题,其中有些过程分析需要对ebp, esp 有清晰的理解,对于ebp 和esp 相信大家都很熟悉了,但是为了使本文自成体系,我还是解释一下。ebp--栈底指针esp--栈顶指针如图所示,简化后的代码调用过程如下:void Layer02(){ int b = 2;}void Layer01(){ int a = 1; Layer02();}那么函数执行过程中ebp和esp是如何变化的呢?如下是反汇编后的代码:void Layer02(){00413700push ebp00413701mov ebp,esp 0041 阅读全文
posted @ 2012-05-25 18:35 SolidMango 阅读(14866) 评论(7) 推荐(6) 编辑