cc682/NetRoc
http://netroc682.spaces.live.com/
!pars
!pars 扩展显示指定的processor application registers file。
语法
!pars Address
参数
Address
指定processor application registers file的地址。
DLL
Windows NT 4.0
|
不可用
|
Windows 2000
|
不可用
|
Windows XP和之后
|
Kdexts.dll
|
该命令只能对Itanium目标机使用。
!pat
!pat 显示目标处理器的页面属性表寄存器(Page Attribute Table (PAT) registers)。
语法
!pat Flag
!pat
参数
Flag
如果设置Flag,调试器在显示PAT之前会先验证PAT功能是否存在。
DLL
Windows NT 4.0
|
不可用
|
Windows 2000
|
Kdextx86.dll
|
Windows XP和之后
|
Kdexts.dll
|
该扩展只能对x86目标机使用。
!pci
!pci 扩展命令用来显示PCI(peripheral component interconnect)总线的当前状态,以及附加到该总线上的任何设备。
语法
!pci [Flags [Bus [Device [Function [MinAddress MaxAddress]]]]]
参数
Flags
指定输出级别。可以是下面这些位的任意组合:
Bit 0 (0x1)
显示详细输出。
Bit 1 (0x2)
显示从bus 0到指定的Bus范围内的所有总线。
Bit 2 (0x4)
显示中包含原始字节格式的信息。如果设置了MinAddress、MaxAddress,或者标志的位0x8,则该标志也自动被设置。
Bit 3 (0x8)
显示中包含原始DWORD格式的信息。
Bit 4 (0x10)
显示中包含无效设备的号码(invalid device number)。如果指定了Device,则跳过该标志。
Bit 5 (0x20)
显示中包含无效功能号(invalid function numbers)。
Bit 6 (0x40)
显示中包含capabilities。
Bit 7 (0x80)
显示Intel 8086设备相关信息(Intel 8086 device-specific information)。
Bit 8 (0x100)
显示PCI配置空间(PCI configuration space)。
Bus
指定要显示的总线。Bus 可以在0到0xFF范围之内。如果省略,则显示primary bus (bus 0)的信息。如果Flags包含bit 1 (0x2), Bus 用于指定要显示的最大一个总线号。
Device
指定设备的slot device number。如果省略,则显示所有设备的信息。
Function
指定设备的slot function number。如果省略,则显示所有的设备功能(device function)。
MinAddress
指定要显示的原始字节或者原始DWORD的首地址。必须在0到0xFF之间。
MaxAddress
指定要显示的原始字节或者原始DWORD的尾地址。必须在0到0xFF之间,并且不能比MinAddress 小。
DLL
Windows NT 4.0
|
Kext.dll Kdextx86.dll
|
Windows 2000
|
Kext.dll Kdextx86.dll
|
Windows XP和之后
|
Kdexts.dll
|
该扩展命令只能对x86目标机使用。
注释
使用!ecb、!ecd、或者 !ecw来编辑PCI配置空间(PCI configuration space)。
下面的例子显示了所有总线和它们的设备的列表。该命令需要较长时间来执行。调试器扫描目标系统的PCI总线时,在显示的信息底部可以看到移动的计数器:
kd> !pci 2 ff
PCI Bus 0
00:0 8086:1237.02 Cmd[0106:.mb..s] Sts[2280:.....] Device Host bridge
0d:0 8086:7000.01 Cmd[0007:imb...] Sts[0280:.....] Device ISA bridge
0d:1 8086:7010.00 Cmd[0005:i.b...] Sts[0280:.....] Device IDE controller
0e:0 1011:0021.02 Cmd[0107:imb..s] Sts[0280:.....] PciBridge 0->1-1 PCI-PCI bridge
10:0 102b:0519.01 Cmd[0083:im....] Sts[0280:.....] Device VGA compatible controller
PCI Bus 1
08:0 10b7:9050.00 Cmd[0107:imb..s] Sts[0200:.....] Device Ethernet
09:0 9004:8178.00 Cmd[0117:imb..s] Sts[0280:.....] Device SCSI controller
下面的例子显示primary bus 上设备的详细信息。每行开头的两位数字是设备号(device number),后面跟的一位数字是功能号(function number):
kd> !pci 1 0
PCI Bus 0
00:0 8086:1237.02 Cmd[0106:.mb..s] Sts[2280:.....] Device Host bridge
cf8:80000000 IntPin:0 IntLine:0 Rom:0 cis:0 cap:0
0d:0 8086:7000.01 Cmd[0007:imb...] Sts[0280:.....] Device ISA bridge
cf8:80006800 IntPin:0 IntLine:0 Rom:0 cis:0 cap:0
0d:1 8086:7010.00 Cmd[0005:i.b...] Sts[0280:.....] Device IDE controller
cf8:80006900 IntPin:0 IntLine:0 Rom:0 cis:0 cap:0
IO[4]:fff1
0e:0 1011:0021.02 Cmd[0107:imb..s] Sts[0280:.....] PciBridge 0->1-1 PCI-PCI bridge
cf8:80007000 IntPin:0 IntLine:0 Rom:0 cap:0 2sts:2280 BCtrl:6 ISA
IO:f000-ffff Mem:fc000000-fdffffff PMem:fff00000-fffff
10:0 102b:0519.01 Cmd[0083:im....] Sts[0280:.....] Device VGA compatible controller
cf8:80008000 IntPin:1 IntLine:9 Rom:80000000 cis:0 cap:0
MEM[0]:fe800000 MPF[1]:fe000008
下面的例子显示bus 0,设备0x0D,功能0x01的更详细一些的信息,包括从地址0x00到0x3F之间的原始DWORD值:
kd> !pci f 0 d 1 0 3f
PCI Bus 0
0d:1 8086:7010.00 Cmd[0005:i.b...] Sts[0280:.....] Device IDE controller
cf8:80006900 IntPin:0 IntLine:0 Rom:0 cis:0 cap:0
IO[4]:fff1
00000000: 70108086 02800005 01018000 00002000
00000010: 00000000 00000000 00000000 00000000
00000020: 0000fff1 00000000 00000000 00000000
00000030: 00000000 00000000 00000000 00000000
附加信息
查看Plug and Play 调试获得该扩展命令的应用和更多示例。关于PCI总线的信息,查看Windows Driver Kit (WDK)文档。
!pciir
!pciir 扩展显示从PCI设备到中断控制器输入(interrupt controller input)的硬件路由(hardware routing)的内容。
语法
!pciir
DLL
Windows NT 4.0
|
不可用
|
Windows 2000
|
Kdextx86.dll
|
Windows XP Windows Server 2003
|
Kdexts.dll
|
Windows Vista和之后
|
不可用
|
该扩展命令只能在未启用ACPI(Advanced Configuration and Power Interface)的x86目标机上使用。
附加信息
使用!acpiirqarb 扩展在启用ACPI的机器上查看类似信息。
关于PCI总线的信息,查看Windows Driver Kit (WDK)文档。
!pcitree
!pcitree 扩展显示PCI设备对象的信息,包括子PCI总线和CardBus总线,以及附加到他们上的设备。
语法
!pcitree
DLL
Windows NT 4.0
|
不可用
|
Windows 2000
|
Kdextx86.dll
|
Windows XP和之后
|
Kdexts.dll
|
注释
下面是一个示例:
kd> !pcitree
Bus 0x0 (FDO Ext fe517338)
0600 12378086 (d=0, f=0) devext fe4f4ee8 Bridge/HOST to PCI
0601 70008086 (d=d, f=0) devext fe4f4ce8 Bridge/PCI to ISA
0101 70108086 (d=d, f=1) devext fe4f4ae8 Mass Storage Controller/IDE
0604 00211011 (d=e, f=0) devext fe4f4788 Bridge/PCI to PCI
Bus 0x1 (FDO Ext fe516998)
0200 905010b7 (d=8, f=0) devext fe515ee8 Network Controller/Ethernet
0100 81789004 (d=9, f=0) devext fe515ce8 Mass Storage Controller/SCSI
0300 0519102b (d=10, f=0) devext fe4f4428 Display Controller/VGA
Total PCI Root busses processed = 1
要根据最后的设备显示来理解输出的内容。它的base class 为03、subclass 为00、Device ID 为0x0519,、Vendor ID 为0x102B。这些值是设备本身固有的。
"d="后面的数字是设备号;"f="后的数字是功能号(function number)。"devext"后是设备扩展的地址: 0xFE4F4428。最后显示base class 名字和subclass名字。
要获得某个设备的更多信息,可以使用!devext 扩展命令,并且将设备扩展地址作为参数。对这类设备,命令应该像下面一样:
kd> !devext fe4f4428 pci
如果!pcitree 扩展产生一个错误,通常意味着PCI符号没有正确的加载。使用.reload pci.sys来修正这个问题。
附加信息
查看Plug and Play调试来获得该扩展命令的应用。关于PCI总线和PCI设备对象的信息,查看 Windows Driver Kit (WDK)文档。
!pcm
!pcm 扩展显示指定的private cache map。该扩展仅在Windows 2000中可用。
语法
!pcm Address
参数
Address
指定private cache map的地址。
DLL
Windows NT 4.0
|
不可用
|
Windows 2000
|
Kdextx86.dll
|
Windows XP和之后
|
不可用(查看注释节)
|
注释
该扩展仅在Windwos 2000中支持。在Windows XP和之后的Windows中,可以使用dt nt!_PRIVATE_CACHE_MAP Address命令。
附加信息
关于缓存管理的信息,查看Microsoft Windows SDK 文档,以及Mark Russinovich 和David Solomon编写的Microsoft Windows Internals。
其他缓存管理命令的信息,可以查看!cchelp扩展的参考。
!pcr
!pcr 扩展显示指定处理器上的处理器控制域(Processor Control Region (PCR))的当前状态。
语法
!pcr [Processor]
参数
Processor
指定要获取哪个处理器的PCR信息。如果省略Processor,则使用当前处理器。
DLL
Windows NT 4.0
|
Kdextx86.dll
|
Windows 2000
|
Kdextx86.dll
|
Windows XP和之后
|
Kdexts.dll
|
注释
处理器控制块(PRCB)是PCR的一个扩展。可以通过!prcb 命令来显示。
下面是x86目标机上的!pcr扩展命令的示例:
kd> !pcr 0
KPCR for Processor 0 at ffdff000:
Major 1 Minor 1
NtTib.ExceptionList: 801626e0
NtTib.StackBase: 801628f0
NtTib.StackLimit: 8015fb00
NtTib.SubSystemTib: 00000000
NtTib.Version: 00000000
NtTib.UserPointer: 00000000
NtTib.SelfTib: 00000000
SelfPcr: ffdff000
Prcb: ffdff120
Irql: 00000000
IRR: 00000000
IDR: ffffffff
InterruptMode: 00000000
IDT: 80043400
GDT: 80043000
TSS: 803cc000
CurrentThread: 8015e8a0
NextThread: 00000000
IdleThread: 8015e8a0
DpcQueue: 0x80168ee0 0x80100d04 ntoskrnl!KiTimerExpiration
显示中的一个条目是中断请求级别(IRQL)。!pcr 扩展显示的是当前IRQL,但是通常对当前IRQL都不是很感兴趣。Bug check或者调试器连接之前的IRQL要更加有用一些。可以通过!irql来显示这种IRQL,但是只有针对运行Windows Server2003和之后版本Windows的机器才有用。
附加信息
关于PCR和PRCB的更多信息,查看Mark Russinovich 和David Solomon 编写的Microsoft Windows Internals。
!pcrs
!pcrs 扩展命令显示Intel Itanium处理器的控制寄存器(control register)。
语法
!pcrs Address
参数
Address
指定processor control registers file的地址。
DLL
Windows NT 4.0
|
不可用
|
Windows 2000
|
不可用
|
Windows XP和之后
|
Kdexts.dll
|
该扩展命令只能对Itanium目标机使用。
注释
不要将!pcrs扩展和 !pcr 混淆,后者用来显示处理器控制域(processor control region)的当前状态。
!pfn
!pfn 扩展用于显示指定的页面帧(page frame)或者整个页面帧数据库(page frame database)。
语法
!pfn PageFrame
参数
PageFrame
指定要显示的页面帧的16进制序号。
DLL
Windows NT 4.0
|
Kdextx86.dll
|
Windows 2000
|
Kdextx86.dll
|
Windows XP和之后
|
Kdexts.dll
|
注释
可以通过!pte扩展获得某个虚拟地址的页面帧序号。
下面是该扩展的输出示例:
kd> !pte 801544f4
801544F4 - PDE at C0300800 PTE at C0200550
contains 0003B163 contains 00154121
pfn 3b G-DA--KWV pfn 154 G--A--KRV
kd> !pfn 3b
PFN 0000003B at address 82350588
flink 00000000 blink / share count 00000221 pteaddress C0300800
reference count 0001 color 0
restore pte 00000000 containing page 000039 Active
kd> !pfn 154
PFN 00000154 at address 82351FE0
flink 00000000 blink / share count 00000001 pteaddress C0200550
reference count 0001 color 0
restore pte 00000060 containing page 00003B Active M
Modified
附加信息
关于页表、页目录、页面帧的信息,查看Mark Russinovich 和David Solomon 编写的Microsoft Windows Internals。
!pmc
!pmc 扩展显示指定地址处的性能监控计数器(Performance Monitor Counter (PMC))寄存器。
该命令仅在Itanium目标机上支持。
语法
!pmc [- Option] Expression [DisplayLevel]
参数
Option
可以是下面这些值中任意一个:
gen
将该寄存器当作常规PMC寄存器显示。
btb
将该寄存器当作branch trace buffer (BTB) PMC寄存器进行显示。
Expression
指定PMC的16进制地址。可以使用表达式@kpfcgen 和@kpfcbtb 用作参数的值。
如果Expression 是@kpfcgen,调试器将当前处理器的PMC寄存器当作常规PMC寄存器显示。还可以通过将Option 设置为gen,并且Expression 值使用@kpfc4、@kpfc5、@kpfc6或者@kpfc7来将当前处理器的PMC寄存器作为常规PMC寄存器显示。
如果Expression 为@kpfcbtb,调试器将当前处理器的PMC寄存器当作BTB PMC寄存器显示。也可以通过Optio设置为btb,并且Expression 的值使用@kpfc12来当作BTB PMC寄存器显示。
DisplayLevel
可以是下面这些值中任意一个:
0
仅显示每个PMC寄存器字段的值。这是默认情况。
1
显示非保留和非忽略的PCM寄存器字段的详细信息。
2
显示所有PMC寄存器字段的详细信息,包括被忽略的和保留的。
DLL
Windows NT 4.0
|
不可用
|
Windows 2000
|
不可用
|
Windows XP和之后
|
Kdexts.dll
|
!pmssa
!pmssa 扩展显示指定的processor Minimal State Save Area (也称为Min-StateSave Area)。
该扩展命令仅在Itanium目标机上可用。
语法
!pmssa Address
参数
Address
指定某个processor Min-StateSave Area的地址。
DLL
Windows NT 4.0
|
不可用
|
Windows 2000
|
不可用
|
Windows XP和之后
|
Kdexts.dll
|
!pnpevent
!pnpevent 扩展显示即插即用(Plug and Play)设备事件队列。
语法
!pnpevent [DeviceEvent]
参数
DeviceEvent
指定要显示的设备事件(device event)的地址。如果为0或者省略,则显示该队列中所有设备事件的树(tree)。
DLL
Windows NT 4.0
|
不可用
|
Windows 2000
|
Kdextx86.dll
|
Windows XP和之后
|
Kdexts.dll
|
附加信息
查看Plug and Play调试获得该扩展命令的应用。关于Plug and Play驱动程序的信息,查看Windows Driver Kit (WDK) 文档。
!pocaps
!pocaps 扩展显示目标机的电源能力(power capability)。
语法
!pocaps
DLL
Windows NT 4.0
|
不可用
|
Windows 2000
|
Kdextx86.dll
|
Windows XP和之后
|
Kdexts.dll
|
注释
下面是该命令输出的示例:
kd> !pocaps
PopCapabilities @ 0x8016b100
Misc Supported Features: S4 FullWake
Processor Features:
Disk Features: SpinDown
Battery Features:
Wake Caps
Ac OnLine Wake: Sx
Soft Lid Wake: Sx
RTC Wake: Sx
Min Device Wake: Sx
Default Wake: Sx
附加信息
要查看系统的电源策略(power policy),可以使用!popolicy 扩展命令。关于电源能力和电源策略的更多信息,查看Windows Driver Kit (WDK) 文档,以及Mark Russinovich 和David Solomon 编写的Microsoft Windows Internals。
!pool
!pool扩展显示指定的内存池分配的信息,或者整个系统范围内内存池的分配信息。
语法
!pool [Address [Flags]]
参数
Address
指定要显示的内存池入口。如果Address是 -1,该命令显示进程中所有堆(all heaps in the process)的信息。如果Address 为0或省略,命令显示进程堆(process heap)的信息。
Flags
指定显示的级别。可以是下面这些位值的任意组合,默认值为0:
Bit 0 (0x1)
显示内存池内容,而不仅仅是头部(pool header)。
Bit 1 (0x2)
(Windows 2000和之后) 不显示所有内存池的头信息,除了实际包含指定的Address的那个。
Bit 31 (0x80000000)
(Windows XP和之后) 不显示池类型(type)和标签(tag)。
DLL
Windows NT 4.0
|
Kdextx86.dll
|
Windows 2000
|
Kdextx86.dll
|
Windows XP和之后
|
Kdexts.dll
|
注释
在Windows XP和之后版本的Windows中,!pool 扩展显示每个分配关联的内存池标签(pool tag)。还会显示该标签的所有者。显示是基于pooltag.txt 文件的内容的。该文件位于Windwos调试工具包安装目录的triage 子目录下。如果需要的话,可以通过编辑该文件来添加自己的项目相关的其他pool tag。
警告 如果在当前版本安装的目录上安装Windwos调试工具包的升级版本,则它会覆盖该目录中所有文件,包括pooltag.txt。如果改变或者替换了示例的pooltag.txt,则要将它先保存到其他目录中。重新安装调试器之后,可以再用保存的那个pooltag.txt来进行覆盖。
如果!pool 扩展报告内存池破坏,应该使用!poolval来进行调查。
下面是一个例子。如果Address 指定0xE1001050,则显示这个块中的所有内存池的头部,并且0xE1001050本身用星号(*)标记。
kd> !pool e1001050
e1001000 size: 40 previous size: 0 (Allocated) MmDT
e1001040 size: 10 previous size: 40 (Free) Mm
*e1001050 size: 10 previous size: 10 (Allocated) *ObDi
e1001060 size: 10 previous size: 10 (Allocated) ObDi
e1001070 size: 10 previous size: 10 (Allocated) Symt
e1001080 size: 40 previous size: 10 (Allocated) ObDm
e10010c0 size: 10 previous size: 40 (Allocated) ObDi
.....
这个例子中,最右边的一列是pool tag。这一列左边显示这个pool是空闲的还是已分配的。
下面的命令显示内存池头部和内容(pool headers and pool contents):
kd> !pool e1001050 1
e1001000 size: 40 previous size: 0 (Allocated) MmDT
e1001008 ffffffff 0057005c 004e0049 004f0044
e1001018 ffffffff 0053005c 00730079 00650074
e1001040 size: 10 previous size: 40 (Free) Mm
e1001048 ffffffff e1007ba8 e1501a58 01028101
e1001058 ffffffff 00000000 e1000240 01028101
*e1001050 size: 10 previous size: 10 (Allocated) *ObDi
e1001058 ffffffff 00000000 e1000240 01028101
e1001068 ffffffff 00000000 e10009c0 01028101
e1001060 size: 10 previous size: 10 (Allocated) ObDi
e1001068 ffffffff 00000000 e10009c0 01028101
e1001078 ffffffff 00000000 00000000 04028101
......
附加信息
关于内存池的信息,查看Windows Driver Kit (WDK) 文档,以及Mark Russinovich 和David Solomon 编写的Microsoft Windows Internals。