cc682/NetRoc
http://netroc682.spaces.live.com/
!searchpte
!searchpte 在物理内存中搜索指定的页面帧序号(PFN)。
语法
!searchpte PFN
!searchpte -?
参数
PFN
以16进制格式指定PFN。
-?
在调试器命令窗口中显示该扩展命令的帮助。
DLL
Windows NT 4.0
|
不可用
|
Windows 2000
|
不可用
|
Windows XP和之后
|
Kdexts.dll
|
注释
任何时候可以通过按下CTRL+BREAK (WinDbg) 或CTRL+C (KD)来中止命令。
附加信息
关于页表和页目录的的信息,查看Mark Russinovich 和David Solomon 编写的Microsoft Windows Internals。
!sel
!sel 扩展命令已经废除,使用dg (Display Selector) 命令替代。
!session
在Windows 2000中,!session命令显示一个或多个用户会话,或者显示运行在多个用户会话中的指定进程。
在Windows XP和之后版本Windows中,!session 用于控制会话上下文。也可以显示所有用户会话的列表。
语法
Windows 2000的语法
!session [SessionID [2 Image]]
Windows XP和之后的语法
!session
!session -s DefaultSession
!session -?
参数
SessionID
(仅Windows 2000) 指定要显示的会话ID。如果为-1或者省略,则显示所有会话。
2 Image
(仅Windows 2000) 指定进程的映像名。SessionID 指定的会话中所有具有这个名字的进程都会显示出来。如果省略Image,则显示 csrss.exe进程。省略该参数可以很容易的列出所有用户会话,因为每个用户会话中都有且只有一个csrss.exe进程。
-s DefaultSession
(Windows XP和之后) 将会话上下文设置为指定值。如果DefaultSession是-1,则将会话上下文设置为当前会话。
-?
(Windows XP和之后) 在调试器命令窗口中显示该扩展命令的帮助文本。
DLL
Windows NT 4.0
|
不可用
|
Windows 2000
|
Kdextx86.dll
|
Windows XP和之后
|
Kdexts.dll
|
注释
这实际上是两个不同的扩展命令。Windows 2000上的!session 用来显示某个用户会话的信息。
Windows XP和之后系统上的!session 用于控制会话上下文。不带参数使用!session 会显示目标机上活动会话的列表。使用!session /s DefaultSession 会把会话上下文改变成新的默认值。
设置会话上下文时,进程上下文也会自动切换成该会话中的活动进程。这时总是应该使用.cache forcedecodeptes。
关于会话和会话上下文相关的命令,查看改变上下文。
附加信息
关于用户会话和会话管理器(smss.exe)的信息,查看Mark Russinovich 和David Solomon 编写的Microsoft Windows Internals。
!spoolsum
!spoolsum 扩展命令对当前会话的内存池信息进行摘要。
语法
!spoolsum [-Option]
!spoolsum -?
参数
Option
可以是下面这些选项的任意组合:
-n
指定搜索非分页池。
-p
搜索分页池。
-f
指定搜索read failure range。
-?
在调试器命令窗口中显示命令帮助。
DLL
Windows NT 4.0
|
不可用
|
Windows 2000
|
不可用
|
Windows XP和之后
|
Kdexts.dll
|
注释
要显示非当前会话的其他会话的内存池摘要信息,可以使用!session 扩展来设置当前会话。
如果选项中没有指定-n 和-p,则分页和非分页池都会搜索。
附加信息
关于会话的信息,查看改变上下文。关于内存池和pool tag的信息,查看Windows Driver Kit (WDK) 文档,以及Mark Russinovich 和David Solomon 编写的Microsoft Windows Internals。
!spoolused
!spoolused 扩展用于显示指定会话拥有的分页内存池的内存使用摘要信息。
语法
!spoolused -p [-s Session] [TagString]]
!spoolused -?
参数
-p
该选项需要一直包含。
-s Session
指定要显示内存池的会话。Session总是被当作10进制数字。如果Session等于-1,则使用当前会话。如果Session 等于-2,则使用会话上下文。
TagString
指定pool tag。TagString 是区分大小写的ASCII字符串。星号(*)可以代表任意数量的字符,问号(?)用来代表单个字符。如果没有使用星号,TagString必须刚好是四个字符。
-?
在调试器命令窗口中显示帮助文本。
DLL
Windows NT 4.0
|
不可用
|
Windows 2000
|
不可用
|
Windows XP和之后
|
Kdexts.dll
|
附加信息
关于会话的信息,查看改变上下文。关于内存池和pool tag的信息,查看Windows Driver Kit (WDK) 文档,以及Mark Russinovich 和David Solomon 编写的Microsoft Windows Internals。
!sprocess
!sprocess 扩展显示指定的会话进程,或者指定会话中的所有进程。
语法
!sprocess Session [Flags [ImageName]]
!sprocess -?
参数
Session
指定拥有需要的进程的会话。Session总是被当作10进制数字。
Session 可以是下面这些值:
-1
|
使用当前会话。这是默认值。
|
-2
|
使用会话上下文。
|
-4
|
按照会话显示所有进程。
|
Flags
指定显示级别。Flags 可以是下面这些位的任意组合。默认值为0。
0x0
|
显示最少信息。
|
Bit 0 (0x1)
|
显示时间和优先级统计。
|
Bit 1 (0x2)
|
显示进程关联的线程和事件列表,以及这些线程的等待状态。
|
Bit 2 (0x4)
|
显示进程关联的线程列表。如果这个位没有和bit 1(0x2)一起使用,则每个线程显示在单独一行上。如果和 bit 1一起使用,则每个线程都会显示调用堆栈。
|
Bit 3 (0x8)
|
对每个函数还显示返回地址、堆栈指针,以及在Itanium系统上的bsp寄存器值。不会显示函数参数。
|
Bit 4 (0x10)
|
每个函数仅显示返回地址。不显示参数和堆栈指针。
|
ImageName
指定要显示的进程名。所有可执行映像名匹配ImageName 的进程都会显示出来。映像名必须和EPROCESS块中的一样。一般来说,这是包含扩展名(一般是.exe)的可执行文件名字,超出15个字符的会截断。不支持包含空格的映像名。
-?
在调试器命令窗口中显示帮助文本。该帮助文本有一些省略。
DLL
Windows NT 4.0
|
不可用
|
Windows 2000
|
不可用
|
Windows XP和之后
|
Kdexts.dll
|
注释
除了还会显示_MM_SESSION_SPACE 和_MMSESSION的地址之外,该扩展的输出和!process命令类似。
附加信息
关于会话和内核模式下的进程地信息,查看改变上下文。关于分析进程和线程的信息,查看 Mark Russinovich 和David Solomon 编写的Microsoft Windows Internals。
!srb
!srb 扩展显示SCSI Request Block (SRB)的信息。
语法
!srb Address
参数
Address
指定目标机上的SRB的16进制地址。
DLL
Windows NT 4.0
|
Kdextx86.dll
|
Windows 2000
|
Kdextx86.dll
|
Windows XP和之后
|
Kdexts.dll
|
注释
SRB 是系统定义的用于从SCSI类驱动程序到SCSI端口驱动程序进行I/O请求通讯的结构。
附加信息
关于SRB的信息,查看Windows Driver Kit (WDK)文档。
!stacks
!stacks 扩展显示内核调用堆栈的信息。
语法
Windows 2000的语法:
!stacks [Detail]
Windows XP和之后的语法:
!stacks [Detail [FilterString]]
参数
Detail
指定要显示的详细级别。下表是Detail的合法值。
0
|
显示当前内核调用堆栈的摘要。这是默认值。
|
1
|
显示当前页换出的堆栈,以及当前内核栈。
|
2
|
显示所有调用堆栈的完整参数,以及当前页换出的堆栈和当前内核堆栈。
|
FilterString
(Windows X和之后) 只显示符号包含指定的字符串的线程。
DLL
Windows NT 4.0
|
不可用
|
Windows 2000
|
Kdextx86.dll
|
Windows XP和之后
|
Kdexts.dll
|
注释
!stacks 扩展给出每个线程状态的简单摘要。可以用它来代替!process扩展命令对系统进行快速查看,特别是在类似资源争用或者死锁这样的多线程问题时。
!findstack用户模式扩展命令也可以显示特定调用堆栈的信息。
下面是一个最简单的!stacks命令示例:
kd> !stacks 0
Proc.Thread .Thread ThreadState Blocker
[System]
4.000050 827eea10 Blocked +0xfe0343a5
[smss.exe]
[csrss.exe]
b0.0000a8 82723b70 Blocked ntoskrnl!_KiSystemService+0xc4
b0.0000c8 82719620 Blocked ntoskrnl!_KiSystemService+0xc4
b0.0000d0 827d5d50 Blocked ntoskrnl!_KiSystemService+0xc4
.....
第一列是进程ID和线程ID(用点号隔开)。
第二列是线程的ETHREAD块的当前地址。
第三列是线程的状态(initialized, ready, running, standby, terminated, transition, 或blocked)。
第四列显示的是线程调用堆栈顶部的地址。
下面是更详细一些的!stacks输出:
kd> !stacks 1
Proc.Thread .Thread ThreadState Blocker
[System]
4.000008 827d0030 Blocked ntoskrnl!MmZeroPageThread+0x66
4.000010 827d0430 Blocked ntoskrnl!ExpWorkerThread+0x189
4.000014 827cf030 Blocked Stack paged out
4.000018 827cfda0 Blocked Stack paged out
4.00001c 827cfb10 Blocked ntoskrnl!ExpWorkerThread+0x189
.....
[smss.exe]
9c.000098 82738310 Blocked Stack paged out
9c.0000a0 826a5190 Blocked Stack paged out
9c.0000a4 82739d30 Blocked Stack paged out
[csrss.exe]
b0.0000bc 826d0030 Blocked Stack paged out
b0.0000b4 826c9030 Blocked Stack paged out
b0.0000a8 82723b70 Blocked ntoskrnl!_KiSystemService+0xc4
.....
kd> !stacks 2
Proc.Thread .Thread ThreadState Blocker
[System]
4.000008 827d0030 Blocked ntoskrnl!KiSwapThread+0xc5
ntoskrnl!KeWaitForMultipleObjects+0x2b4
ntoskrnl!MmZeroPageThread+0x66
ntoskrnl!Phase1Initialization+0xd82
ntoskrnl!PspSystemThreadStartup+0x4d
ntoskrnl!CreateSystemRootLink+0x3d8
+0x3f3f3f3f
4.000010 827d0430 Blocked ntoskrnl!KiSwapThread+0xc5
ntoskrnl!KeRemoveQueue+0x191
.....
附加信息
关于内核栈的信息,查看Mark Russinovich 和David Solomon 编写的Microsoft Windows Internals。
!swd
!swd 扩展指定处理器上的软件看门狗记时器状态(software watchdog timer state),包括线程的延迟过程调用(DPC)和看门狗计时器状态。
语法
!swd [Processor]
参数
Processor
指定处理器。如果省略Processor ,则显示目标机上所有处理器的信息。
DLL
Windows NT 4.0
|
不可用
|
Windows 2000
|
不可用
|
Windows XP和之后
|
Kdexts.dll
|
注释
当Windows停止响应时,看门狗定时器用于关闭或重起Windows。事件以秒为单位显示。
!sysinfo
!sysinfo 扩展命令从dump文件或活动系统中读取和显示指定的SMBIOS、高级配置电源接口(ACPI) 、CPU信息。
语法
!sysinfo cpuinfo [-csv [-noheaders]]
!sysinfo cpumicrocode [-csv [-noheaders]]
!sysinfo cpuspeed [-csv [-noheaders]]
!sysinfo gbl [-csv [-noheaders]]
!sysinfo machineid [-csv [-noheaders]]
!sysinfo registers
!sysinfo smbios [-csv [-noheaders]] {-debug | -devices | -memory | -power | -processor | -system | -v}
!sysinfo -?
参数
cpuinfo
显示处理器的信息。
cpumicrocode
(仅GenuineIntel处理器) 显示初始的和缓存的微代码处理器版本(the initial and cached microcode processor versions)。
cpuspeed
显示最高和当前的处理器速度。
gbl
显示ACPI表的BIOS列表。
machineid
显示SMBIOS、BIOS、固件(firmware)、系统(system)和主板(baseboard)的机器ID(machine ID)信息。
registers
显示MSR。
smbios
显示SMBIOS表。
-csv
以逗号分隔,变长(CSV)格式显示所有数据。
-noheaders
不显示CSV格式的头。
-debug
用标准格式和CSV格式显示输出。
-devices
显示SMBIOS表中的设备条目。
-memory
显示SMBIOS表中的内存条目。
-power
显示SMBIOS表中的电源条目。
-processor
显示SMBIOS表中的处理器条目。
-system
显示SMBIOS表中的系统条目。
-v
详细输出。显示SMBIOS表中的表项的详细信息。
-?
在调试器命令窗口中显示命令帮助。
DLL
Windows NT 4.0
|
不可用
|
Windows 2000
|
不可用
|
Windows XP base system Windows 2003 base system
|
不可用
|
Windows XP, Service Pack 2和之后 Windows 2003, Service Pack 1和之后
|
Kdexts.dll
|
注释
该扩展仅在调试没有从内核或者完整dump文件转变成minidump的dump文件时,或者启动完成并已联机(例如,在登陆提示符下)的活动系统上有用。
可以在单个命令中组合使用-debug、 -devices、 memory、 -power、 -processor、 -system、以及 -v 参数。
下面这些参数只在特定系统中支持:
- gbl 参数仅在支持ACPI的机器上工作。
- smbios 参数仅在支持SMBIOS的目标机上工作。
- registers 参数不能用于Itanium目标机,因为它们不使用MSR。
Microsoft尽了一切可能从这些记录中除去个人身份信息(personally identifiable information (PII))。Dump文件中去除掉了所有PII。但是,在活动系统上,一些PII可能还没有去掉。所以,PII字段可能输出为0或者空白,即使它们实际包含了信息。
要停止使用了cpuinfo、 gbl、 registers、或smbios 参数的命令,可以按下CTRL+BREAK (WinDbg) 或CTRL+C (KD)。
!sysptes
!sysptes 扩展显示系统页表项(PTE)格式化后的信息。
语法
!sysptes [Flags]
参数
Flags
指定显示的详细级别。Flags 可以是下面这些位的任意组合。默认值为0:
Bit 0 (0x1)
显示空闲PTE的信息。
Bit 1 (0x2)
(仅Windows NT 4.0 和Windows 2000) 在页面使用统计中显示未使用的页面。
(Windows XP和之后) 在global special pool 中显示空闲PTE信息。
Bit 2 (0x4)
(Windows 2000和之后) 显示所有分配来用于映射锁定页面(locked pages)的系统PTE的详细信息。
Bit 3 (0x8)
(仅Windows 2000 和Windows XP) 显示nonpaged pool expansion free PTE information。如果设置了这个位,则不显示其他列表。如果同时设置了0x1和0x8,则显示所有的nonpaged pool expansion free PTE。如果只设置0x8,则仅显示总数。
Bit 4 (0x10)
(Windows Vista 和之后) 显示会话的special pool free PTE信息。
DLL
Windows NT 4.0
|
Kdextx86.dll
|
Windows 2000
|
Kdextx86.dll
|
Windows XP和之后
|
Kdexts.dll
|
注释
要查看指定的PTE,使用!pte扩展。
下面是Windows 2000系统的示例:
kd> !sysptes 1
System PTE Information
Total System Ptes 50962
SysPtes list of size 1 has 389 free
SysPtes list of size 2 has 95 free
SysPtes list of size 4 has 55 free
SysPtes list of size 8 has 35 free
SysPtes list of size 16 has 27 free
starting PTE: c03c7000
ending PTE: c03f8c44
loading (99% complete)
free ptes: c03c8d60 number free: 45134.
free blocks: 1 total free: 45134 largest free block: 45134
Page Count
a0 2.
a1 2.
a2 2.
a3 2.
......
在Windows XP和之后版本的Windows中,除了不包含末尾的页面计数统计之外,输出是类似的。下面是Windows XP系统上的示例:
kd> !sysptes 1
System PTE Information
Total System Ptes 571224
SysPtes list of size 1 has 361 free
SysPtes list of size 2 has 91 free
SysPtes list of size 4 has 48 free
SysPtes list of size 8 has 36 free
SysPtes list of size 9 has 29 free
SysPtes list of size 23 has 29 free
starting PTE: fffffe0059388000
ending PTE: fffffe00597e3ab8
free ptes: fffffe0059388000 number free: 551557.
free ptes: fffffe00597be558 number free: 104.
free ptes: fffffe00597d2828 number free: 676.
free blocks: 3 total free: 552337 largest free block: 551557
附加信息
关于页表和PTE的信息,查看Mark Russinovich 和David Solomon 编写的Microsoft Windows Internals。