NetRoc's Blog

N-Tech

 

WinDbg 文档翻译----70_2

cc682/NetRoc

http://netroc682.spaces.live.com/

!findxmldata

!findxmldata 从包含内核模式小内存转储文件的CAB文件中提取XML数据。

语法

!findxmldata [ -d DeviceName | -h HwId ] 
!findxmldata -r Driver 
!findxmldata -chksum -z CabFile ]
!findxmldata -v 

参数

-d DeviceName

显示所有设备名包含DeviceName 指定的字符串的设备。

-h HwId

显示所有硬件ID包含HwId 指定的字符串的设备。如果同时使用-d-h,调试器仅显示两个都匹配的设备。

-r Driver

显示Driver 参数指定的驱动程序的信息,以及所有使用该驱动的设备。

-chksum

显示XML文件的校验和。

-z CabFile

CabFile 参数指定的CAB文件进行一次校验和计算,而不是使用默认的Sysdata.xml文件中的。

-v

显示系统版本信息

DLL

Windows NT 4.0

Ext.dll

Windows 2000

Ext.dll

Windows XP和之后

Ext.dll

!findxmldata 扩展仅针对保存在CAB文件中的内核模式小内存转储文件。

注释

!findxmldata 扩展从包含内核模式小内存转储文件的CAB文件中的Sysdata.xml 文件提取数据。

不使用任何选项时,命令显示所有设备。

下面的例子说明了如何使用!findxmldata

kd> !findxmldata -v
SYSTEM Info:
OSVER: 5.1.2600 2.0
OSLANGUAGE: 2052
OSNAME: Microsoft Windows XP Home Edition
kd> !findxmldata -d MIDI
Node DEVICE
        DESCRIPTION    : MPU-401 Compatible MIDI Device
        HARDWAREID     : ACPI\PNPB006
        SERVICE        : ms_mpu401
        DRIVER         : msmpu401.sys

kd> !findxmldata -r msmpu
Node DRIVER
        FILENAME       : msmpu401.sys
        FILESIZE       : 2944
        CREATIONDATE   : 05-06-2005 09:18:34
        VERSION        : 5.1.2600.0
        MANUFACTURER   : Microsoft Corporation
        PRODUCTNAME    : Microsoft« Windows« Operating System
Node DEVICE
        DESCRIPTION    : MPU-401 Compatible MIDI Device
        HARDWAREID     : ACPI\PNPB006
        SERVICE        : ms_mpu401
        DRIVER         : msmpu401.sys

kd> !findxmldata -h PCI\VEN_8086&DEV_24C3&SUBSYS_24C28086
Node DEVICE
        DESCRIPTION    : Intel(R) 82801DB/DBM SMBus Controller - 24C3
        HARDWAREID     : PCI\VEN_8086&DEV_24C3&SUBSYS_24C28086&REV_01
kd> !findxmldata -h USB\ROOT_HUB&VID8086&PID24C4&REV0001
Node DEVICE
        DESCRIPTION    : USB Root Hub
        HARDWAREID     : USB\ROOT_HUB&VID8086&PID24C4&REV0001
        SERVICE        : usbhub
        DRIVER         : usbhub.sys

kd> !findxmldata -h ACPI\PNPB006
Node DEVICE
        DESCRIPTION    : MPU-401 Compatible MIDI Device
        HARDWAREID     : ACPI\PNPB006
        SERVICE        : ms_mpu401
        DRIVER         : msmpu401.sys

附加信息

关于如何将dump文件放入CAB文件的更多信息,查看.dumpcab (Create Dump File CAB)。关于如何调试内核模式dump文件,包括保存在CAB文件中的dump,查看分析内核模式Dump文件

!for_each_frame

!for_each_frame 对当前线程的调用堆栈的每一帧执行一次指定的调试器命令。

语法

!for_each_frame ["CommandString"
!for_each_frame -? 

参数

CommandString

指定每一帧要执行的调试器命令。如果CommandString 包含多条命令,必须用分号分隔它们,并且将整个CommandString 包含在引号中。如果有多条命令,则CommandString 中的每一条命令都不能使用引号。如果想在Command 中使用当前帧的序号,可以通过@$frame伪寄存器。

-?

调试器命令窗口中显示该扩展命令的帮助。

DLL

Windows NT 4.0

Ext.dll

Windows 2000

Ext.dll

Windows XP和之后

Ext.dll

注释

如果没有指定任何参数,!for_each_frame 扩展列出所有的帧和它们的帧序号。关于帧列表的更详细信息,可以使用k (Display Stack Backtrace) 命令。

k 命令最多处理256帧。对枚举出来的每一帧,这一帧都会暂时变成当前的局部上下文(和.frame (Set Local Context) 命令类似)。当上下文设置之后,会执行 CommandString 。所有帧都被使用过之后,局部上下文会重置为使用!for_each_frame 之前的值。

如果包含CommandString,调试器会在为每一帧执行命令之前显示帧和帧序号。

下面的命令显示当前堆栈中的所有局部变量。

!for_each_frame !for_each_local dt @#Local

附加信息

关于局部上下文的更多信息,查看改变上下文

!for_each_local

!for_each_local 对当前帧中的每一个局部变量执行调试器命令。

语法

!for_each_local ["CommandString"
!for_each_local -? 

参数

CommandString

指定要为当前堆栈帧中的每个局部变量执行的调试器命令。如果CommandString包含多条命令,必须用分号分隔它们,并且将整个CommandString 包含在引号中。如果有多条命令,则CommandString 中的每一条命令都不能使用引号。

CommandString中或者CommandString中的命令执行的脚本中,都可以使用@#Local 别名。该别名会被局部变量的名字替换。这种替换在CommandString 执行之前并且进行任何其它的分析之前进行。该别名区分大小写,并且必须在前后都添加空格,即使它被包含在小括号中。如果使用C++ 表达式语法,必须用@@( @#Local )的形式来使用该别名。

该别名仅在!for_each_local 的生命周期中可用。不要将它和位寄存器、预定义别名或自定义别名混淆。

-?

调试器命令窗口中显示该扩展命令的帮助。

DLL

Windows NT 4.0

Ext.dll

Windows 2000

Ext.dll

Windows XP和之后

Ext.dll

注释

如果没有指定任何参数,!for_each_local 列出所有局部变量。可以使用dv (Display Local Variables)命令查看局部变量的更多信息。

如果打开了调试器的详细输出,显示中会包括该扩展被调用时的局部变量总数,并且每次为局部变量执行CommandString时使用的CommandString 文本也会显示出来。

附加信息

关于如何显示和修改局部变量的更多信息,以及其他内存相关命令的说明,查看读写内存

!for_each_module

!for_each_module 扩展对每个已加载模块执行指定的调试器命令一次。

语法

!for_each_module ["CommandString"
!for_each_module -? 

参数

CommandString

指定要为调试器的模块列表中每个模块执行一次的调试器命令。如果CommandString包含多条命令,必须用分号分隔它们,并且将整个CommandString 包含在引号中。如果有多条命令,则CommandString 中的每一条命令都不能使用引号。

CommandStringCommandString 的命令执行的任何脚本中,都可以使用以下这些别名。

别名

数据类型

@#ModuleIndex

ULONG

模块号。模块是从0开始连续的枚举的。

@#ModuleName

string

模块名。这个名字一般是不带扩展名的文件名。某些情况下,模块名和文件名会有显著不同。更多信息,查看可执行映像路径

@#ImageName

string

可执行文件的名字,包含扩展名。一般来说,用户模式下会包含全路径,而内核模式不会。

@#LoadedImageName

string

如果不存在Microsoft CodeView符号,该别名和映像名一样。如果 在Microsoft Windows NT 4.0上存在CodeView符号,该别名是.dbg 文件的全路径。

@#MappedImageName

string

大多数情况下该别名为NULL。如果调试器映射了映像文件(例如调试minidump时),该别名是被映射的映像名。

@#SymbolFileName

string

符号文件的路径和名字。如果没有加载任何符号,该别名是可执行文件的名字。

@#ModuleNameSize

ULONG

模块名字符串的长度加1。

@#ImageNameSize

ULONG

映像名字符串的长度加1。

@#LoadedImageNameSize

ULONG

已加载映像名的字符串长度加1。

@#MappedImageNameSize

ULONG

已映射的映像名的字符串长度加1。

@#SymbolFileNameSize

ULONG

符号文件名字符串长度加1。

@#Base

ULONG64

映像开始位置的地址。

@#Size

ULONG

映像大小,以字节为单位。

@#End

ULONG64

映像的结束地址。

@#TimeDateStamp

ULONG

映像的时间和日期。如果要将该时间和日期展开为可读的形式,需要使用.formats (Show Number Formats)命令。

@#Checksum

ULONG

模块的校验和。

@#Flags

ULONG

模块的标志。DEBUG_MODULE_Xxx 值的列表,参见Dbgeng.h

@#SymbolType

USHORT

符号类型。DEBUG_SYMTYPE_Xxx 的值的列表,参见Dbgeng.h

 

这些别名都在每个模块执行CommandString 之前以及进行任何其他的分析之前被替换。它们是区分大小写的。别名前后都必须加上空格,即使使用括号括起来。如果使用C++表达式语法,必须以@@( @#alias )的形式来使用。

这些别名仅在!for_each_module 的生命周期中可用。不要将它们和伪寄存器、预定义别名或自定义别名混淆。

-?

调试器命令窗口中显示该扩展命令的帮助。

DLL

Windows NT 4.0

Ext.dll

Windows 2000

Ext.dll

Windows XP和之后

Ext.dll

注释

如果未指定任何参数,!for_each_module显示所有已加载模块的信息。该信息和使用下面命令的输出类似。

!for_each_module .echo @#ModuleIndex : @#Base @#End @#ModuleName @#ImageName  @#LoadedImageName

查看已加载和已卸载模块的更多信息,可以使用lm (List Loaded Modules)命令。

如果启用了详细的调试器输出,则调用该扩展命令时还会显示已加载和已卸载模块的总数,并且针对每个模块的CommandString命令执行前会显示详细信息(包括每个可用的别名的值) 。

下面是如何使用!for_each_module的例子。这个命令显示全局调试标志。

!for_each_module x ${@#ModuleName}!*Debug*Flag*
!for_each_module x ${@#ModuleName}!g*Debug*

下面的命令使用!chkimg检查每个模块是否被修改过了:

!for_each_module !chkimg @#ModuleName

下面的命令再每个已加载模块中搜索"MZ"。

!for_each_module s-a @#Base @#End "MZ"

附加信息

关于如何定义和使用别名来作为输入字符串的快捷方式 (包括 ${ } 标记的使用)的更多信息,查看使用别名

!gflag

!gflag 扩展设置或显示全局标志。

语法

!gflag [+|-Value 
!gflag {+|-Abbreviation 
!gflag -? 
!gflag 

参数

Value

指定一个32位的16进制值。如果不使用加号(+)或者减号(-),则将全局标志的对应位设置为新值。如果在数字前使用了加号(+),会将全局标志的一个或多个位设置为1。如果数字前使用减号(-),则将一个或多个位设置为0。

Abbreviation

指定单个全局标志。Abbreviation 是要设置为1(+)或者0 (-)的全局标志的三字母缩写。

-?

调试器命令窗口中显示该扩展命令的帮助文本,包括全局标志的缩写列表。

DLL

Windows NT 4.0

不可用

Windows 2000

Kdextx86.dll
Ntsdexts.dll

Windows XP和之后

Exts.dll

注释

如果没有指定任何参数,!gflag 显示当前的全局标志设置。

下面是Abbreviation 参数可用的缩写的表格。

名字

说明

0x00000001

"soe"

异常时停止。

0x00000002

"sls"

显示加载器快照(loader snaps)。

0x00000004

"dic"

调试初始命令。

0x00000008

"shg"

如果GUI停止响应(即挂起)则停止。

0x00000010

"htc"

启用堆尾部检查。

0x00000020

"hfc"

启用堆释放检查。

0x00000040

"hpc"

启用堆参数检查。

0x00000080

"hvc"

调用时进行堆的确认。

0x00000100

"ptc"

启用内存池尾部(pool tail)检查。

0x00000200

"pfc"

启用内存池释放检查.

0x00000400

"ptg"

启用内存池标记(tagging)。

0x00000800

"htg"

启用堆标记。

0x00001000

"ust"

创建一个用户模式堆栈回溯DB。

0x00002000

"kst"

创建一个内核模式堆栈回溯DB。

0x00004000

"otl"

维护一个每种类型的对象列表。

0x00008000

"htd"

通过DLL启用堆标记。

0x00010000

"idp"

未使用。

0x00020000

"d32"

启用对Microsoft Win32子系统的调试。

0x00040000

"ksl"

启用对内核调试器符号的加载。

0x00080000

"dps"

禁止对内核堆栈分页。

0x00100000

"scb"

启用紧急系统中断(critical system breaks)。

0x00200000

"dhc"

禁止在堆释放时进行合并。

0x00400000

"ece"

启用关闭异常(close exception)。

0x00800000

"eel"

启用异常日志。

0x01000000

"eot"

启用对象句柄类型标记(object handle type tagging)。

0x02000000

"hpa"

将堆分配放到页面末尾(Put heap allocations at the end of pages)。

0x04000000

"dwl"

调试INLOGON。

0x08000000

"ddp"

禁止内核模式的DbgPrintKdPrint 输出。

0x10000000

NULL

未使用。

0x20000000

NULL

未使用。

0x40000000

NULL

未使用。

0x80000000

"dpd"

禁止保护DLL验证(protected DLL verification)。

 

附加信息

也可以使用全局标志实用程序(Gflags.exe)来设置这些标志。

!gle

!gle 扩展显示当前线程的最后一个错误码。

语法

!gle [-all

参数

-all

显示目标系统中每个用户模式线程的最终错误。如果在用户模式下省略该参数,调试器显示当前线程的最终错误。如果内核模式下省略该参数,调试器显示当前的寄存器上下文指定的线程的最终错误。

DLL

Windows NT 4.0

Ext.dll
Ntsdexts.dll

Windows 2000

Ext.dll
Ntsdexts.dll

Windows XP和之后

Ext.dll

注释

!gle扩展显示GetLastError的值并尝试解码它。

内核模式下,!gle 扩展只有在调试器能够读取线程环境块(TEB)时才能工作。

附加信息

关于GetLastError 函数的更多信息,查看Micorosft Windows SDK 文档。

!gs

!gs 扩展用于分析/GS 堆栈溢出。

语法

!gs

DLL

Windows NT 4.0

Ext.dll

Windows 2000

Ext.dll

Windows XP和之后

Ext.dll

注释

!gs 扩展用于协助调试缓冲区溢出。当遇到STATUS_STACK_BUFFER_OVERRUN错误时使用!gs ,如下。

0:000> !gs
Corruption occurred in mshtml!CDoc::OnPaint or one of its callers
Real canary not found at 0x74866010
Canary at gsfailure frame 0x292ea4e7
Corrupted canary 0x0013e2c8: 0x00000000
Corrupted cookie value too generic, skipping init bit-flip check
a caller of mshtml!CDoc::OnPaint has corrupted the EBP from 0x0013e254 to 0x0013
e234
check callers (without canary) of mshtml!CDoc::OnPaint for 0x1 bytes of overflow

The canary doesn't look corrupted. Not sure how we got here
EBP/ESP check skipped: No saved EBP in exception context
Function mshtml!CDoc::OnPaint:
  00000000 - 00000004 this                      CDoc*
  0013de40 - 0013e180 rd                        CDoc::OnPaint::__l39::REGION_DAT
A
  0013e180 - 0013e18c Lock                      CDoc::CLock
  0013e18c - 0013e224 DI                        CFormDrawInfo
  0013e23c - 0013e240 hwndInplace               HWND__*
  0013e240 - 0013e244 prc                       tagRECT*
  0013e248 - 0013e250 ptBefore                  tagPOINT
  0013e250 - 0013e254 fViewIsReady              int
  0013e250 - 0013e254 fHtPalette                int
  0013e254 - 0013e258 fNoPaint                  int
  0013e258 - 0013e260 ptAfter                   tagPOINT
  0013e260 - 0013e264 c                         int
  0013e264 - 0013e268 hrgn                      HRGN__*
  0013e268 - 0013e2a8 ps                        tagPAINTSTRUCT
Candidate buffer : ps 0013e268 to 0013e2a7
  0013e268 ea 04 01 a7 00 00 00 00-10 01 00 00 f3 00 00 00 ................
  0013e278 ed 03 00 00 44 02 00 00-84 e5 13 00 f4 e2 13 00 ....D...........
  ...
  0013e2ac 38 20 01 03 10 e3 13 00-68 6b e6 01 d0 e6 03 00 8 ......hk......
  0013e2bc 80 fa 03 00 0d 00 00 00-10 08 19 00 00 00 00 00 ................
0:000>

posted on 2008-07-09 16:27 NetRoc 阅读(1129) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。

导航

统计

常用链接

留言簿(7)

随笔档案(99)

文章分类(35)

文章档案(32)

Friends

Mirror

搜索

最新评论

阅读排行榜

评论排行榜