Large Pool 错误

引用注明>> 【作者:张佩】【原文:www.yiiyee.cn/blog

我前几个月曾经分析了一个BAD_POOL_CALLER的问题(链接),今天收到的这个dump文件,系统是Win7 X64,最后发现问题和前者非常相似,但二者的分析过程却截然不同。

引子

打开dump文件后,首先进行自动分析。蓝屏号是0x4E。

************************************************************
*                                                          *
*                        Bugcheck Analysis                 *
*                                                          *
************************************************************

PFN_LIST_CORRUPT (4e)
Typically caused by drivers passing bad memory descriptor lists (ie: calling
MmUnlockPages twice with the same list, etc).  If a kernel debugger is
available get the stack trace.
Arguments:
Arg1: 000000000000009a, 
Arg2: 000000000014e26c
Arg3: 0000000000000006
Arg4: 0000000000000002
 继续阅读“Large Pool 错误”

9,892 total views, 6 views today

虫趣:FAST_MUTEX死锁

拿到一个dump文件后,经过简单分析,是设备驱动在处理电源IRP时,超时未完成导致的。这是一个典型的0x9F BSOD错误:

DRIVER_POWER_STATE_FAILURE (9f)
A driver has failed to complete a power IRP within a specific time (usually 10 minutes).
Arguments:
Arg1: 0000000000000003, A device object has been blocking an Irp for too long a time
Arg2: fffffa800182aa90, Physical Device Object of the stack
Arg3: fffff800139e9930, nt!TRIAGE_9F_POWER on Win7, otherwise the Functional Device Object of the stack
Arg4: fffffa8002437e10, The blocked IRP

继续阅读“虫趣:FAST_MUTEX死锁”

7,386 total views, 3 views today

Windbg调试命令详解

转载注明>> 作者:张佩】【原文http://www.yiiyee.cn/Blog

1. 概述

用户成功安装微软Windows调试工具集后,能够在安装目录下发现四个调试器程序,分别是:cdb.exe、ntsd.exe、kd.exe和Windbg.exe。其中cdb.exe和ntsd.exe只能调试用户程序,Kd.exe主要用于内核调试,有时候也用于用户态调试,上述三者的一个共同特点是,都只有控制台界面,以命令行形式工作。

Windbg.exe在用户态、内核态下都能够发挥调试功能,尤其重要的是,它不再是命令行格式而是采用了可视化的用户界面。所以绝大部分情况下,我们在谈及Windows调试工具的时候,都直接指向Windbg,而不大谈及前三者。

Windbg在用户态和内核态下,都支持两种调试模式,即“实时调试模式(Living)”和“事后调试模式(Postmortem)”。所谓实时模式,是被调试的目标对象(Target)当前正在运行当中,调试器可以实时分析、修改被调试目标的状态,如寄存器、内存、变量,调试exe可执行程序或双击双机实时调试都属于这种模式;所谓事后模式,是被调试的目标对象(Target)已经结束了,现在只是事后对它保留的快照进行分析,这个快照称为转储文件(Dump文件)。 继续阅读“Windbg调试命令详解”

49,678 total views, 19 views today

Windbg中查看计算机名

转载注明>> 【作者:张佩】【原文:http://www.yiiyee.cn/Blog

 引子

 使用Windbg调试目标对象的时候,用户发现到它的一个缺陷,就是不能自动识别目标设备的机器名。实际上Windbg总是标出了Machine Name的关键字,但却从来都没有显示。可以认为Windbg在这个地方有点小缺陷。见下面的例子:
0:000> vertarget
Windows 7 Version 7601 (Service Pack 1) MP (8 procs) Free x64
Product: WinNt, suite: SingleUserTS
kernel32.dll version: 6.1.7601.18015 (win7sp1_gdr.121129-1432)
Machine Name:
Debug session time: Thu Aug 22 10:11:04.000 2013 (UTC + 8:00)
System Uptime: 14 days 17:26:44.613
Process Uptime: 14 days 17:14:25.000
  Kernel time: 0 days 0:09:02.000
  User time: 0 days 0:42:36.000

继续阅读“Windbg中查看计算机名”

8,083 total views, 3 views today

初学Windbg,从主题布局开始

欢迎转载:作者:张佩】【原文:http://www.yiiyee.cn/Blog/windbg-theme/

[download id=”4″]

Windbg把和调试相关的所有配置称为workspace,这些配置信息包括:调试窗口类型和位置,打开的文件和窗口位置,符号、源码和可执行文件的路径,以及断点设置等。Windbg中包含多种不同类型的workspace:

  1. 基本workspace。打开Windbg并且没有进行任何调试操作的情况下,使用这个workspace。
  2. 默认workspace。它分为默认的用户调试内核调试远程调试,三种不同类型的默认workspace。
  3. 处理器workspace。内核调试时,根据处理器类型的不同,会配置不同的workspace。不同的处理器类型包括X86、X64和IA64。
  4. 命名workspace。可以把你的配置保存为一个命名的workspace保存在注册表中,并且在需要的时候应用它。Windbg软件本身也会根据你所调试的可执行程序或dump文件,自动保存为命名workspace。这就是为什么你调试了一次HelloWorld程序后,下次再次调试的时候,Windbg会自动打开很多相关的源文件,并自动加载符号的原因。

所有这些workspace的信息都被保存在注册表中,注册表的路径是: 继续阅读“初学Windbg,从主题布局开始”

8,572 total views, 4 views today