摘要: cc682/NetRoc
http://netroc682.spaces.live.com/
!mca
在x86目标机上,!mca 扩展用于显示机器检查架构(machine check architecture (MCA))寄存器。在Itanium目标机上,!mca用于显示MCA错误记录。
语法
x86 目标机语法
!mca
Itanium目标机语法
!m...
阅读全文
cc682/NetRoc
http://netroc682.spaces.live.com/
!job
!job 扩展用来显示一个作业(job)对象。
语法
!job [Process [Flags]]
参数
Process
指定要查看的job对象所关联的进程或者线程的16进制地址。如果省略或者设为-1(Windows 2000中)或者0 (Windows XP和之后),则显示当前进程关联的job对象。
Flags
指定显示中包含的内容。可以是任意下面这些位值的和。默认值为0x1:
Bit 0 (0x1)
显示job的设置和统计。
Bit 1 (0x2)
显示job中所有进程的列表。
DLL
Windows NT 4.0
|
不可用
|
Windows 2000
|
Kdextx86.dll
|
Windows XP和之后
|
Kdexts.dll
|
注释
下面是该扩展输出的示例:
kd> !process 52c
Searching for Process with Cid == 52c
PROCESS 8276c550 SessionId: 0 Cid: 052c Peb: 7ffdf000 ParentCid: 0060
DirBase: 01289000 ObjectTable: 825f0368 TableSize: 24.
Image: cmd.exe
VadRoot 825609e8 Vads 30 Clone 0 Private 77. Modified 0. Locked 0.
DeviceMap e1733f38
Token e1681610
ElapsedTime 0:00:12.0949
UserTime 0:00:00.0359
.....
CommitCharge 109
Job 8256e1f0
kd> !job 8256e1f0
Job at ffffffff8256e1f0
TotalPageFaultCount 0
TotalProcesses 1
ActiveProcesses 1
TotalTerminatedProcesses 0
LimitFlags 0
MinimumWorkingSetSize 0
MaximumWorkingSetSize 0
ActiveProcessLimit 0
PriorityClass 0
UIRestrictionsClass 0
SecurityLimitFlags 0
Token 00000000
附加信息
关于job对象的信息,查看Mark Russinovich 和David Solomon 编写的Microsoft Windows Internals。
!kb, !kv
!kb 和!kv 扩展命令已经废除。使用kb (Display Stack Backtrace) 和kv (Display Stack Backtrace) 命令来替代。
!loadermemorylist
!loadermemorylist 扩展显示Windows boot loader传递给Windows的内存分配列表。
语法
!loadermemorylist ListHeadAddress
参数
ListHeadAddress
指定列表头的地址。
DLL
Windows NT 4.0
|
Kdexts.dll
|
Windows 2000
|
Kdexts.dll
|
Windows XP Windows Server 2003
|
Kdexts.dll
|
Windows Vista和之后
|
Kdexts.dll
|
注释
该扩展是设计在Ntldr正在运行的系统引导早期使用的。它会在内存分配列表中显示开始位置、结束为止和每个页范围的类型。
任何时候按下CTRL+BREAK (WinDbg) 或CTRL+C (KD)都可以中断命令的执行。
!lockedpages
!lockedpages 扩展在Windows 2000中显示当前进程的driver-locked page,在Windows XP和之后的系统中显示指定进程的driver-locked page。
语法
Windows 2000的语法
!lockedpages
Windows XP和之后的语法
!lockedpages [Process]
参数
Process
(仅Windows XP和之后) 指定某个进程。如果省略Process,则使用当前进程。
DLL
Windows NT 4.0
|
不可用
|
Windows 2000
|
Kdextx86.dll
|
Windows XP和之后
|
Kdexts.dll
|
注释
任何时候按下CTRL+BREAK (WinDbg) 或CTRL+C (KD)都可以中断命令的执行。
!locks (!kdext*.locks)
Kdextx86.dll 和Kdexts.dll中的!locks 扩展命令显示内核ERESOURCE 锁的信息。
该命令不要和!ntsdexts.locks 扩展命令混淆。
语法
!locks [Options] [Address]
参数
Options
指定要显示的信息数量。可以是下面这些选项的任意组合:
-v
显示每个锁的详细信息。
-p
显示锁的所有可能的信息,包括性能统计。
-d
显示所有锁的信息。否则只显示出现争用的锁。
Address
指定要显示的ERESOURCE 锁的16进制地址。如果Address为0或者省略,则显示系统中所有ERESOURCE 锁。
DLL
Windows NT 4.0
|
Kdextx86.dll
|
Windows 2000
|
Kdextx86.dll
|
Windows XP和之后
|
Kdexts.dll
|
注释
!locks 扩展显示线程为资源而持有的所有的锁。锁可以是共享的(shared)或者独占的(exclusive),独占意味着其它线程不能访问该资源。当系统发生死锁时这个信息很有用。死锁是由于某个非执行的线程持有了某个资源的独占锁,但是其它执行的线程又需要这个所的时候会发生。
在Microsoft Windows 2000中通常可以通过查找非执行线程持有了某个执行线程请求的某个资源的独占锁的情况,来定位死锁。大多数的锁都是共享的。
下面是基本的!locks 输出的示例:
kd> !locks
**** DUMP OF ALL RESOURCE OBJECTS ****
KD: Scanning for held locks......
Resource @ 0x80e97620 Shared 4 owning threads
Threads: ff688da0-01<*> ff687da0-01<*> ff686da0-01<*> ff685da0-01<*>
KD: Scanning for held locks.......................................................
Resource @ 0x80e23f38 Shared 1 owning threads
Threads: 80ed0023-01<*> *** Actual Thread 80ed0020
KD: Scanning for held locks.
Resource @ 0x80d8b0b0 Shared 1 owning threads
Threads: 80ed0023-01<*> *** Actual Thread 80ed0020
2263 total locks, 3 locks currently held
注意显示出来的每个线程的地址后面都跟有线程计数 (例如"-01")。如果某个线程后跟有 I "<*>",则该线程是锁的所有者。有些情况下,初始线程的地址会包含一个偏移。这种情况下,实际的线程地址也会显示出来。
如果想查看这些资源对象中某一个的更多信息,可以将"Resource @"后的地址作为其它命令的参数。要查看上面例子中的第二个资源,可以使用dt ERESOURCE 80d8b0b0 或者 !thread 80ed0020。或者也可以带-v选项再次使用!locks:
kd> !locks -v 80d8b0b0
Resource @ 0x80d8b0b0 Shared 1 owning threads
Threads: 80ed0023-01<*> *** Actual Thread 80ed0020
THREAD 80ed0020 Cid 4.2c Teb: 00000000 Win32Thread: 00000000 WAIT: (WrQueue) KernelMode Non-Alertable
8055e100 Unknown
Not impersonating
GetUlongFromAddress: unable to read from 00000000
Owning Process 80ed5238
WaitTime (ticks) 44294977
Context Switch Count 147830
UserTime 0:00:00.0000
KernelTime 0:00:02.0143
Start Address nt!ExpWorkerThread (0x80506aa2)
Stack Init fafa4000 Current fafa3d18 Base fafa4000 Limit fafa1000 Call 0
Priority 13 BasePriority 13 PriorityDecrement 0
ChildEBP RetAddr
fafa3d30 804fe997 nt!KiSwapContext+0x25 (FPO: [EBP 0xfafa3d48] [0,0,4]) [D:\NT\base\ntos\ke\i386\ctxswap.asm @ 139]
fafa3d48 80506a17 nt!KiSwapThread+0x85 (FPO: [Non-Fpo]) (CONV: fastcall) [d:\nt\base\ntos\ke\thredsup.c @ 1960]
fafa3d78 80506b36 nt!KeRemoveQueue+0x24c (FPO: [Non-Fpo]) (CONV: stdcall) [d:\nt\base\ntos\ke\queueobj.c @ 542]
fafa3dac 805ad8bb nt!ExpWorkerThread+0xc6 (FPO: [Non-Fpo]) (CONV: stdcall) [d:\nt\base\ntos\ex\worker.c @ 1130]
fafa3ddc 8050ec72 nt!PspSystemThreadStartup+0x2e (FPO: [Non-Fpo]) (CONV: stdcall) [d:\nt\base\ntos\ps\create.c @ 2164]
00000000 00000000 nt!KiThreadStartup+0x16 [D:\NT\base\ntos\ke\i386\threadbg.asm @ 81]
1 total locks, 1 locks currently held
!logonsession
!logonsession 扩展显示指定的登陆会话(logon session)的信息。
语法
Free Build 语法
!logonsession LUID
Checked Build语法
!logonsession LUID [InfoLevel]
参数
LUID
指定要显示的登陆会话的局部唯一标识符(LUID)。 如果LUID为0,则显示所有登陆会话的信息。
要在check版中显示系统会话和所有系统令牌(system token),输入!logonsession 3e7 1。
InfoLevel
(仅Checked Build) 指定要显示多少令牌信息(token information)。InfoLevel 参数可以是0到4之间的值,0表示最少的信息,4表示最多。
DLL
Windows NT 4.0
|
不可用
|
Windows 2000
|
不可用
|
Windows XP和之后
|
Kdexts.dll
|
注释
下面是该扩展命令在free build上的输出示例:
kd> !logonsession 0
Dumping all logon sessions.
** Session 0 = 0x0
LogonId = {0x0 0x0}
References = 0
** Session 1 = 0x8ebb50
LogonId = {0xe9f1 0x0}
References = 21
** Session 2 = 0x6e31e0
LogonId = {0x94d1 0x0}
References = 1
** Session 3 = 0x8ecd60
LogonId = {0x6b31 0x0}
References = 0
** Session 4 = 0xe0000106
LogonId = {0x0 0x0}
References = 0
** Session 5 = 0x0
LogonId = {0x0 0x0}
References = 0
** Session 6 = 0x8e9720
LogonId = {0x3e4 0x0}
References = 6
** Session 7 = 0xe0000106
LogonId = {0x0 0x0}
References = 0
** Session 8 = 0xa2e160
LogonId = {0x3e5 0x0}
References = 3
** Session 9 = 0xe0000106
LogonId = {0x0 0x0}
References = 0
** Session 10 = 0x3ca0
LogonId = {0x3e6 0x0}
References = 2
** Session 11 = 0xe0000106
LogonId = {0x0 0x0}
References = 0
** Session 12 = 0x1cd0
LogonId = {0x3e7 0x0}
References = 33
** Session 13 = 0xe0000106
LogonId = {0x0 0x0}
References = 0
14 sessions in the system.
任何时候都可以通过按下CTRL+BREAK (WinDbg) 或CTRL+C (KD)来中止命令执行。
附加信息
关于登陆会话的信息,查看Microsoft Windows SDK 文档和Mark Russinovich 和David Solomon 编写的Microsoft Windows Internals。
!lookaside
!lookaside 扩展可以显示look-aside lists的信息、重置look-aside list的计数器、或者改变look-aside list的深度。
语法
!lookaside [Address [Options [Depth]]]
参数
Address
指定要使用的look-aside lists的16进制地址。如果Address为0或者省略,则显示所有的系统look-aside list。
Options
控制要进行的操作。支持下面这些可能的Options 。默认值为0:
0
显示指定的look-aside list 的信息。 (如果Address为0,则显示所有系统look-aside list。)
1
重置指定look-aside list的计数器。(仅Windows NT 4.0:如果Address 为0,则重置所有small pool look-aside list。)
2
改变指定look-aside list 的深度。该选项只有在Address 非0时可以使用。
Depth
设置给定的look-aside list的最大深度。该参数仅在Addres非0,并且Options 等于 2时可用。
DLL
Windows NT 4.0
|
Kdextx86.dll
|
Windows 2000
|
Kdextx86.dll
|
Windows XP和之后
|
Kdexts.dll
|
注释
Look-aside list是一种用于管理固定大小的分页或非分页内存池的多处理器安全的机制。
由于在大多数平台上都不使用自旋锁(spin lock),所以look-aside list是高效的。
注意如果look-aside list的当前深度大于它的最大深度,则释放关联到该list的结构时会释放到池内存中,而不是释放到list内存中。
下面是该扩展的输出示例:
kd> !lookaside e0000165f7621800
Lookaside "" @ e0000165f7621800 "Ntfs"
Type = 0011 PagedPool RaiseIfAllocationFailure
Current Depth = 0 Max Depth = 4
Size = 488 Max Alloc = 1952
AllocateMisses = 3 FreeMisses = 0
TotalAllocates = 4 TotalFrees = 4
Hit Rate = 25% Hit Rate = 100%
附加信息
关于look-aside list的信息,查看Windows Driver Kit (WDK) 文档,以及 Mark Russinovich 和David Solomon编写的Microsoft Windows Internals。
!lpc
!lpc 扩展显示目标系统中的本地过程调用(local procedure call (LPC))端口和信息。
语法
Windows NT 4.0的语法
!lpc
Windows 2000的语法
!lpc message MessageID
!lpc port Port
!lpc scan Port
!lpc thread Thread
!lpc
Windows Server 2003 和Windows XP的语法
!lpc message MessageID
!lpc port Port
!lpc scan Port
!lpc thread Thread
!lpc PoolSearch
!lpc
参数
message
(仅Windows Server 2003、Windows XP、和Windows 2000) 如果有的话,显示某条消息的信息,例如队列中包含该消息的服务器端口(server port)、等待该消息的线程。
MessageID
(仅Windows Server 2003、Windows XP、和Windows 2000) 指定要显示的消息的消息ID。如果该参数的值为0或者省略,!lpc message 命令显示消息的摘要列表。(在Windows 2000 Service Pack 1 (SP1)中,摘要包括LPC zone 的所有消息。在Windows 2000 Service Pack 2 (SP2)、 Windows XP和之后版本的Windows中,摘要包括系统池中的所有消息。已经被页换出得消息不会包含。)
port
(仅Windows Server 2003、Windows XP、和Windows 2000) 显示端口信息,如端口的名字、信号量状态、队列中的消息、裁剪队列(rundown queue)中的线程、句柄数量、引用、以及相关的端口。
scan
(仅Windows Server 2003、Windows XP、和Windows 2000) 显示指定端口以及连接到它的所有端口的摘要信息。
Port
(仅Windows Server 2003、Windows XP、和Windows 2000) 指定要显示的端口的16进制地址。如果使用!lpc port 命令,并且 Port 为0或省略,则显示所由LPC端口的摘要列表。如果使用!lpc scan 命令,Port 必须指定一个实际的端口地址。
thread
(仅Windows Server 2003、Windows XP、和Windows 2000) 显示在rundown port queue中包含指定线程的所有端口的信息。
Thread
(仅Windows Server 2003、Windows XP、和Windows 2000) 指定线程的16进制地址。如果为0或者省略,!lpc thread命令显示所有正在进行LPC操作的线程的摘要列表。
PoolSearch
(仅Windows Server 2003、Windows XP、和Windows 2000) 指定!lpc message命令是否在内核池(kernel pool)中搜索消息。每次使用!lpc PoolSearch时,该设置会在打开和关闭之间切换(初始设置是不搜索内核池)。它仅作用于MessageID指定为非0值的!lpc message命令。
DLL
Windows NT 4.0
|
Kdextx86.dll
|
Windows 2000
|
Kdextx86.dll
|
Windows XP Windows Server 2003
|
Kdexts.dll
|
注释
该扩展在Windows Vista和之后版本的Windows中不支持。
在Windows NT 4.0,不带参数使用 !lpc 会显示目标机上所有LPC端口和消息,类似在Windows 2000和之后系统中使用!lpc port 然后使用 !lpc message。
在Windows Server 2003、Windows XP和Windows 2000中,不带参数使用!lpc 会在调试器命令窗口中显示该扩展命令的帮助文本。
如果有某个线程被标记为在等待某条消息返回,可以使用!lpc message 命令和这条延迟的消息的ID。命令会显示该消息、包含它的端口、以及所有被延迟的线程。
如果找不到消息,并且没有读取错误(例如"Unable to access zone segment"),则服务器已经接收到了这条消息。
这种情况下,服务器端口一般可以通过!lpc thread命令找到。等待响应的线程连接到服务器通信队列(server communication queue)上。这条命令可以显示所有包含指定线程的端口。知道了端口地址之后,可以使用!lpc port 命令。通过使用!lpc thread 命令和线程地址,可以获得关于每条线程的更多信息。
下面是扩展命令在Windows XP系统上的输出示例:
这个例子中,显示了所有LPC端口。
kd> !lpc port
Scanning 225 objects
1 Port: 0xe1405650 Connection: 0xe1405650 Communication: 0x00000000 'SeRmCommandPort'
1 Port: 0xe141ef50 Connection: 0xe141ef50 Communication: 0x00000000 'SmApiPort'
1 Port: 0xe13c5740 Connection: 0xe13c5740 Communication: 0x00000000 'ApiPort'
1 Port: 0xe13d9550 Connection: 0xe13d9550 Communication: 0x00000000 'SbApiPort'
3 Port: 0xe13d8830 Connection: 0xe141ef50 Communication: 0xe13d8910 ''
80000004 Port: 0xe13d8910 Connection: 0xe141ef50 Communication: 0xe13d8830 ''
3 Port: 0xe13d8750 Connection: 0xe13d9550 Communication: 0xe13a4030 ''
.....
上面例子中,地址e14ae238 处的端口没有消息,即所有消息都已经被接收并且没有新消息到达。
kd> !lpc port e14ae238
Server connection port e14ae238 Name: ApiPort
Handles: 1 References: 107
Server process : 84aa0140 (csrss.exe)
Queue semaphore : 84a96da8
Semaphore state 0 (0x0)
The message queue is empty
The LpcDataInfoChainHead queue is empty
上面例子中,0xe14ae238 处的端口有已排队但是还没有被服务器接收的消息。
kd> !lpc port 0xe14ae238
Server connection port e14ae238 Name: ApiPort
Handles: 1 References: 108
Server process : 84aa0140 (csrss.exe)
Queue semaphore : 84a96da8
Semaphore state 0 (0x0)
Messages in queue:
0000 e20d9b80 - Busy Id=0002249c From: 0584.0680 Context=00000021 [e14ae248 . e14ae248]
Length=0098007c Type=00000001 (LPC_REQUEST)
Data: 00000000 0002021e 00000584 00000680 002f0001 00000007
The message queue contains 1 messages
The LpcDataInfoChainHead queue is empty
剩下的这些Windows XP上的示例是关于可以在这条扩展命令中使用的其它选项的。
kd> !lpc message 222be
Searching message 222be in threads ...
Client thread 842a4db0 waiting a reply from 222be
Searching thread 842a4db0 in port rundown queues ...
Server communication port 0xe114a3c0
Handles: 1 References: 1
The LpcDataInfoChainHead queue is empty
Connected port: 0xe1e7b948 Server connection port: 0xe14ae238
Client communication port 0xe1e7b948
Handles: 1 References: 3
The LpcDataInfoChainHead queue is empty
Server connection port e14ae238 Name: ApiPort
Handles: 1 References: 107
Server process : 84aa0140 (csrss.exe)
Queue semaphore : 84a96da8
Semaphore state 0 (0x0)
The message queue is empty
The LpcDataInfoChainHead queue is empty
Done.
kd> !lpc thread 842a4db0
Searching thread 842a4db0 in port rundown queues ...
Server communication port 0xe114a3c0
Handles: 1 References: 1
The LpcDataInfoChainHead queue is empty
Connected port: 0xe1e7b948 Server connection port: 0xe14ae238
Client communication port 0xe1e7b948
Handles: 1 References: 3
The LpcDataInfoChainHead queue is empty
Server connection port e14ae238 Name: ApiPort
Handles: 1 References: 107
Server process : 84aa0140 (csrss.exe)
Queue semaphore : 84a96da8
Semaphore state 0 (0x0)
The message queue is empty
The LpcDataInfoChainHead queue is empty
kd> !lpc scan e13d8830
Scanning 225 objects
3 Port: 0xe13d8830 Connection: 0xe141ef50 Communication: 0xe13d8910 ''
80000004 Port: 0xe13d8910 Connection: 0xe141ef50 Communication: 0xe13d8830 ''
Scanning 3 objects
下面是在Windows NT 4.0系统上的输出示例:
kd> !lpc
Scanning 2 objects of type 'Port'
Connection Port Object at e11b8bc0 - Name='\SmApiPort' created by smss.exe
Connection Port Object at e11ba040 - Name='\SeRmCommandPort' created by System
附加信息
关于LPC的信息,查看Windows Driver Kit (WDK) 文档,以及Mark Russinovich 和David Solomon 编写的Microsoft Windows Internals。
cc682/NetRoc
http://netroc682.spaces.live.com/
!gbl
!gbl 扩展显示目标机的ACPI BIOS 根系统描述表(ACPI BIOS Root System Description (RSDT) table)的头信息。
语法
!gbl [-v]
参数
-v
详细输出。显示表中的详细信息。
DLL
Windows NT 4.0
|
不可用
|
Windows 2000
|
不可用
|
Windows XP和之后
|
Kdexts.dll
|
附加信息
关于ACPI和ACPI表的更多信息,查看其他ACPI调试扩展以及
ACPI Specification站点。也可以查看Microsoft Windows SDK文档、Windows Driver Kit (WDK)文档、以及Mark Russinovich 和David Solomon 编写的Microsoft Windows Internals。
!gentable
!gentable 扩展显示某个RTL_GENERIC_TABLE 。
语法
Windows 2000中的语法
!gentable Address
Windows XP和之后的语法
!gentable Address [Flag]
参数
Address
指定RTL_GENERIC_TABLE的地址。
Flag
(Windows XP 和之后) 指定表的来源。如果Flag 是1,则使用AVL表,如果Flag 为0或者省略,则使用non-AVL 表。在Windows 2000中,总是使用non-AVL表。
DLL
Windows NT 4.0
|
不可用
|
Windows 2000
|
Kdextx86.dll
|
Windows XP和之后
|
Kdexts.dll
|
!hidppd
!hidppd 扩展显示HIDP_PREPARSED_DATA 结构的内容。
语法
!hidppd Address
参数
Address
指定HIDP_PREPARSED_DATA 结构的16进制地址。
DLL
Windows NT 4.0
|
不可用
|
Windows 2000
|
Kdextx86.dll
|
Windows XP和之后
|
Kdexts.dll
|
附加信息
关于human input devices (HID)的信息,查看Windows Driver Kit (WDK) 文档。
!ib, !id, !iw
!ib、 !id、和 !iw 命令已经废除。使用ib, id, iw (Input from Port)命令替代。
!icpleak
!icpleak 扩展在系统中查找队列中条目个数最大的I/O completion对象。
语法
!icpleak [HandleFlag]
参数
HandleFlag
如果设置了该标志,则还会显示拥有该最大的队列条目个数的对象句柄的所有进程。
DLL
Windows NT 4.0
|
不可用
|
Windows 2000
|
不可用
|
Windows XP和之后
|
Kdexts.dll
|
注释
该扩展在I/O completion池存在泄漏的情况下很有用。I/O completion pool 泄露在进程调用PostQueuedCompletionStatus 分配I/O completion packet,但是又没有调用GetQueuedCompletionStatus 来释放,或者进程将completion entries排队到某个端口,但是又没有任何线程会取出这些entries时就会发生。通过运行!poolused 扩展并且检查ICP pool tag的值来发现泄露。如果有使用ICP tag的池(pool),那么就可能发生了泄露。
该扩展只有在系统维护了类型列表(type lists)时才能工作。如果设置了HandleFlag并且系统中有很多进程,则可能需要运行很长时间。
可以按下CTRL+BREAK (WinDbg中) 或者CTRL+C (KD中)来中止命令。
附加信息
关于I/O完成端口( I/O completion port)的信息,查看Mark Russinovich 和David Solomon编写的 Microsoft Windows Internals。
!idt
!idt 扩展显示指定的中断分配表(interrupt dispatch table (IDT))中的中断服务例程(interrupt service routine (ISR))。
语法
!idt IDT
!idt [-a]
!idt -?
参数
IDT
指定要显示的IDT。
-a
没有指定IDT 时,会以简短的格式显示目标机上所有处理器的IDT。如果指定了-a ,则显示所有IDT的ISR。
-?
在调试器命令窗口中显示该命令的帮助文本。
DLL
Windows NT 4.0
|
不可用
|
Windows 2000
|
不可用
|
Windows XP和之后
|
Kdexts.dll
|
该扩展命令只能对x64或者x86目标机使用。
注释
下面是该扩展命令的示例:
0: kd> !idt
Dumping IDT:
37:806ba78c hal!PicSpuriousService37
3d:806bbc90 hal!HalpApcInterrupt
41:806bbb04 hal!HalpDispatchInterrupt
50:806ba864 hal!HalpApicRebootService
63:8641376c VIDEOPRT!pVideoPortInterrupt (KINTERRUPT 86413730)
73:862aa044 portcls!CInterruptSyncServiceRoutine (KINTERRUPT 862aa008)
82:86594314 atapi!IdePortInterrupt (KINTERRUPT 865942d8)
83:86591bec SCSIPORT!ScsiPortInterrupt (KINTERRUPT 86591bb0)
92:862b53dc serial!SerialCIsrSw (KINTERRUPT 862b53a0)
93:86435844 i8042prt!I8042KeyboardInterruptService (KINTERRUPT 86435808)
a3:863b366c i8042prt!I8042MouseInterruptService (KINTERRUPT 863b3630)
a4:8636bbec USBPORT!USBPORT_InterruptService (KINTERRUPT 8636bbb0)
b1:86585bec ACPI!ACPIInterruptServiceRoutine (KINTERRUPT 86585bb0)
b2:863c0524 serial!SerialCIsrSw (KINTERRUPT 863c04e8)
b4:86391a54 NDIS!ndisMIsr (KINTERRUPT 86391a18)
USBPORT!USBPORT_InterruptService (KINTERRUPT 863ae890)
c1:806ba9d0 hal!HalpBroadcastCallService
d1:806b9dd4 hal!HalpClockInterrupt
e1:806baf30 hal!HalpIpiHandler
e3:806baca8 hal!HalpLocalApicErrorService
fd:806bb460 hal!HalpProfileInterrupt
附加信息
关于ISR和IDT的信息,查看Windows Driver Kit (WDK) 文档,以及Mark Russinovich 和David Solomon 编写的Microsoft Windows Internals。
关于如何显示Itanium目标机上的中断向量表(interrupt vector table),查看!ivt。
!ih
!ih 显示指定处理器上的中断历史纪录。
语法
!ih Processor
参数
Processor
指定某个处理器。如果省略Processor ,则使用当前处理器。
DLL
Windows NT 4.0
|
不可用
|
Windows 2000
|
不可用
|
Windows XP和之后
|
Kdexts.dll
|
该命令只能对Itanium目标机使用。
注释
该扩展在不涉及程序计数器符号(program counter symbols)的情况下显示中断历史纪录。要使用程序计数器符号来显示中断历史纪录,使用!ihs扩展。在引导入口选项中添加/configflag=32来启用中断历史纪录。
下面是该命令输出的示例:
kd> !ih
Total # of interruptions = 2093185
Vector IIP IPSR ExtraField
VHPT FAULT e0000000830d3190 1010092a6018 IFA= 6fc00a0200c
VHPT FAULT e0000000830d33d0 1010092a6018 IFA= 1ffffe00001de2d0
VHPT FAULT e0000000830d33d0 1010092a6018 IFA= 1ffffe01befff338
VHPT FAULT e0000000830d3190 1010092a6018 IFA= 6fc00a0200c
VHPT FAULT e0000000830d33d0 1010092a6018 IFA= 1ffffe00001d9188
VHPT FAULT e0000000830d3880 1010092a6018 IFA= 1ffffe01befff250
VHPT FAULT e0000000830d3fb0 1010092a6018 IFA= e0000165f82dc1c0
VHPT FAULT e000000083063390 1010092a6018 IFA= e0000000fffe0018
THREAD SWITCH e000000085896040 e00000008588c040 OSP= e0000165f82dbd40
VHPT FAULT e00000008329b130 1210092a6018 IFA= e0000165f7edaf30
VHPT FAULT e0000165f7eda640 1210092a6018 IFA= e0000165fff968a9
PROCESS SWITCH e0000000818bbe10 e000000085896040 OSP= e0000165f8281de0
VHPT FAULT e00000008307cfc0 1010092a2018 IFA= e00000008189fe50
EXTERNAL INTERRUPT e0000000830623b0 1010092a6018 IVR= d0
VHPT FAULT e00000008314e310 1010092a2018 IFA= e0000165f88203f0
VHPT FAULT e000000083580760 1010092a2018 IFA= e0000000f00ff3fd
PROCESS SWITCH e00000008558c990 e0000000818bbe10 OSP= e00000008189fe20
VHPT FAULT e00000008307cfc0 1010092a2018 IFA= e0000165f02433f0
VHPT FAULT 77cfbda0 1013082a6018 IFA= 77cfbda0
VHPT FAULT 77cfbdb0 1213082a6018 IFA= 6fbfee0ff98
DATA ACCESS BIT 77b8e150 1213082a6018 IFA= 77c16ab8
VHPT FAULT 77ed5d60 1013082a6018 IFA= 6fbfffa6048
DATA ACCESS BIT 77ed5d60 1213082a6018 IFA= 77c229c0
DATA ACCESS BIT 77b8e1b0 1013082a6018 IFA= 77c1c320
USER SYSCALL 77cafa40 10082a6018 Num= 42
VHPT FAULT e00000008344dc20 1010092a6018 IFA= e000010600703784
...
!ihs
!ihs 扩展使用程序计数器符号(program counter symbols)来显示指定处理器的中断历史纪录。
语法
!ihs Processor
参数
Processor
指定某个处理器。如果省略Processor ,则使用当前处理器。
DLL
Windows NT 4.0
|
不可用
|
Windows 2000
|
不可用
|
Windows XP和之后
|
Kdexts.dll
|
该命令只能对Itanium目标机使用。
注释
使用!ih 扩展在不引用程序计数器符号的情况下显示中断历史纪录。在引导入口选项中添加/configflag=32来启用中断历史纪录。
下面是该扩展命令的输出示例:
kd> !ihs
Total # of interruptions = 2093185
Vector IIP IPSR ExtraField IIP Symbol
VHPT FAULT e0000000830d3190 1010092a6018 IFA= 6fc00a0200c nt!MiAgeAndEstimateAvailableInWorkingSet+0x70
VHPT FAULT e0000000830d33d0 1010092a6018 IFA= 1ffffe00001de2d0 nt!MiAgeAndEstimateAvailableInWorkingSet+0x2b0
VHPT FAULT e0000000830d33d0 1010092a6018 IFA= 1ffffe01befff338 nt!MiAgeAndEstimateAvailableInWorkingSet+0x2b0
VHPT FAULT e0000000830d3190 1010092a6018 IFA= 6fc00a0200c nt!MiAgeAndEstimateAvailableInWorkingSet+0x70
VHPT FAULT e0000000830d33d0 1010092a6018 IFA= 1ffffe00001d9188 nt!MiAgeAndEstimateAvailableInWorkingSet+0x2b0
VHPT FAULT e0000000830d3880 1010092a6018 IFA= 1ffffe01befff250 nt!MiAgeAndEstimateAvailableInWorkingSet+0x760
VHPT FAULT e0000000830d3fb0 1010092a6018 IFA= e0000165f82dc1c0 nt!MiCheckAndSetSystemTrimCriteria+0x190
VHPT FAULT e000000083063390 1010092a6018 IFA= e0000000fffe0018 nt!KeQuerySystemTime+0x30
THREAD SWITCH e000000085896040 e00000008588c040 OSP= e0000165f82dbd40
VHPT FAULT e00000008329b130 1210092a6018 IFA= e0000165f7edaf30 nt!IopProcessWorkItem+0x30
VHPT FAULT e0000165f7eda640 1210092a6018 IFA= e0000165fff968a9 netbios!RunTimerForLana+0x60
PROCESS SWITCH e0000000818bbe10 e000000085896040 OSP= e0000165f8281de0
VHPT FAULT e00000008307cfc0 1010092a2018 IFA= e00000008189fe50 nt!SwapFromIdle+0x1e0
EXTERNAL INTERRUPT e0000000830623b0 1010092a6018 IVR= d0 nt!Kil_TopOfIdleLoop
VHPT FAULT e00000008314e310 1010092a2018 IFA= e0000165f88203f0 nt!KdReceivePacket+0x10
VHPT FAULT e000000083580760 1010092a2018 IFA= e0000000f00ff3fd hal!READ_PORT_UCHAR+0x80
PROCESS SWITCH e00000008558c990 e0000000818bbe10 OSP= e00000008189fe20
VHPT FAULT e00000008307cfc0 1010092a2018 IFA= e0000165f02433f0 nt!SwapFromIdle+0x1e0
VHPT FAULT 77cfbda0 1013082a6018 IFA= 77cfbda0 0x0000000077cfbda0
VHPT FAULT 77cfbdb0 1213082a6018 IFA= 6fbfee0ff98 0x0000000077cfbdb0
DATA ACCESS BIT 77b8e150 1213082a6018 IFA= 77c16ab8 0x0000000077b8e150
VHPT FAULT 77ed5d60 1013082a6018 IFA= 6fbfffa6048 0x0000000077ed5d60
DATA ACCESS BIT 77ed5d60 1213082a6018 IFA= 77c229c0 0x0000000077ed5d60
DATA ACCESS BIT 77b8e1b0 1013082a6018 IFA= 77c1c320 0x0000000077b8e1b0
USER SYSCALL 77cafa40 10082a6018 Num= 42 0x0000000077cafa40
VHPT FAULT e00000008344dc20 1010092a6018 IFA= e000010600703784 nt!ExpLookupHandleTableEntry+0x20
...
!ioresdes
!ioresdes 扩展显示指定地址处的IO_RESOURCE_DESCRIPTOR结构。
语法
!ioresdes Address
参数
Address
指定IO_RESOURCE_DESCRIPTOR 结构的16进制地址。
DLL
Windows NT 4.0
|
不可用
|
Windows 2000
|
Kdextx86.dll
|
Windows XP和之后
|
Kdexts.dll
|
附加信息
查看Plug and Play调试获得该扩展命令的应用。关于IO_RESOURCE_DESCRIPTOR结构的信息,查看 Windows Driver Kit (WDK) 文档。
!ioreslist
!ioreslist 扩展显示一个IO_RESOURCE_REQUIREMENTS_LIST结构。
语法
!ioreslist Address
参数
Address
指定IO_RESOURCE_REQUIREMENTS_LIST 结构的16进制地址。
DLL
Windows NT 4.0
|
不可用
|
Windows 2000
|
Kdextx86.dll
|
Windows XP和之后
|
Kdexts.dll
|
注释
下面是该扩展输出的示例:
kd> !ioreslist 0xe122b768
IoResList at 0xe122b768 : Interface 0x5 Bus 0 Slot 0xe
Alternative 0 (Version 1.1)
Preferred Descriptor 0 - Port (0x1) Device Exclusive (0x1)
Flags (0x01) - PORT_IO
0x000100 byte range with alignment 0x000100
1000 - 0x10ff
Alternative Descriptor 1 - Port (0x1) Device Exclusive (0x1)
Flags (0x01) - PORT_IO
0x000100 byte range with alignment 0x000100
0 - 0xffffffff
Descriptor 2 - DevicePrivate (0x81) Device Exclusive (0x1)
Flags (0000) -
Data: : 0x1 0x0 0x0
Preferred Descriptor 3 - Memory (0x3) Device Exclusive (0x1)
Flags (0000) - READ_WRITE
0x001000 byte range with alignment 0x001000
40080000 - 0x40080fff
Alternative Descriptor 4 - Memory (0x3) Device Exclusive (0x1)
Flags (0000) - READ_WRITE
0x001000 byte range with alignment 0x001000
0 - 0xffffffff
Descriptor 5 - DevicePrivate (0x81) Device Exclusive (0x1)
Flags (0000) -
Data: : 0x1 0x1 0x0
Descriptor 6 - Interrupt (0x2) Shared (0x3)
Flags (0000) - LEVEL_SENSITIVE
0xb - 0xb
IO_RESOURCE_REQUIREMENTS_LIST包含这些信息:
有四种类型的资源: I/O、内存、IRQ、DMA。
每个首选设置都有一个"Preferred" 描述符和数个"Alternative"描述符。
资源列表包含下面这些需求:
申请了0x1000 到0x10FF 的范围,但是只要按0x100对齐的话,可以使用从0到0xFFFFFFFF 之间任何0x100 长度的范围,(例如,可以访问0x1100 到0x11FF。)
申请了0x40080000 到0x40080FFF的范围,但是可以使用0到0xFFFFFFFF 之间以0x1000对齐的任何大小为0x1000的范围。
必须使用 IRQ 0xB。
中断和DMA通道是以开始和结束相同的区域的形式。
附加信息
查看Plug and Play 调试获得该扩展命令的应用。IO_RESOURCE_REQUIREMENTS_LIST结构的信息,查看Windows Driver Kit (WDK)文档。
摘要: cc682/NetRoc
http://netroc682.spaces.live.com/
!iovirp
!iovirp 扩展显示指定的I/O Verifier IRP 的详细信息。
语法
!iovirp [IRP]
参数
IRP
指定被驱动程序验证器(Driver Verifier)跟踪的IRP的地址。如果IRP 为0或省略,则显示每个未完...
阅读全文
摘要: cc682/NetRoc
http://netroc682.spaces.live.com/
!eb, !ed
!eb 和!ed 扩展向指定的物理地址写入一系列值。
这些命令不能和e* (Enter Values) 命令混淆。
语法
!eb [Flag] PhysicalAddress Data [ ...&nbs...
阅读全文
摘要: cc682/NetRoc
http://netroc682.spaces.live.com/
!ca
!ca 扩展命令显示指定的节(section)的控制域(control area)。
语法
!ca Address
参数
Address
指定节的16进制地址。
DLL
...
阅读全文
摘要: cc682/NetRoc
http://netroc682.spaces.live.com/
!defwrites
!defwrites 扩展显示缓存管理器(cache manager)使用到的内核变量的值。
语法
!defwrites
DLL
...
阅读全文
摘要: cc682/NetRoc
http://netroc682.spaces.live.com/
内核模式扩展
本参考节主要描述主要在内核模式调试时使用的扩展命令。
调试器会自动加载这些扩展命令的适当版本。如果没有自己加载不同的版本,则不需要了解究竟使用的是哪个DLL版本。查看使用调试器扩展命令获得默认的模块搜索顺序的说明。查看 加载调试器扩展DLL获得如何加载扩展模块的说明。
每...
阅读全文
cc682/NetRoc
http://netroc682.spaces.live.com/
!mui
!mui 扩展命令显示多语言用户接口(Multilingual User Interface (MUI))缓存信息。MUI的实现在Windows Vista中被显著的改良了。所以该功能在早期的实现上可能是不明确的。
语法
用户模式语法
!mui –c
!mui –f
!mui -i
!mui -r ModuleAddress
!mui -t
!mui -?
内核模式语法
!mui -c
!mui –f
!mui -i
!mui -s
!mui -r ModuleAddress
!mui -t
!mui -?
参数
-c
输出中包含语言标识符(language identifier (ID))、指向模块的指针、指向资源配置数据(resource configuration data)的指针、以及指向每个模块关联的MUI DLL的指针。
-f
输出中包含加载器合并的语言后备列表(loader merged language fallback list)。
-i
输出中包含已安装和授权的MUI语言,以及它们的关联信息。
-r ModuleAddress
显示ModuleAddress 模块的资源配置数据(resource configuration data)。包括文件类型、校验和的值、以及资源类型。
-s
(仅内核模式) 输出中包含模块和每个模块关联的MUI DLL的完整路径。
-t
输出中包含线程的首选语言(preference language)。
-?
在调试器命令窗口中显示该扩展命令的简要帮助文本。
DLL
Windows NT 4.0
|
不可用
|
Windows 2000
|
不可用
|
Windows XP
|
不可用
|
Windows Vista 和之后
|
Exts.dll
|
附加信息
关于MUI和资源配置数据格式(resource configuration data format)的更多信息,查看Microsoft Windows SDK 文档。
!net_send
!net_send 扩展通过本地网络发送一条消息。
语法
!net_send SendingMachine TargetMachine Sender Message
参数
SendingMachine
指定要处理该命令的计算机。建议使用调试器所运行的计算机的名字,因为网络配置可能会拒绝发送这条消息。SendingMachine 不能在开头包括反斜线(\\)。
TargetMachine
指定发送消息的对象。TargetMachine 不能在开头包含反斜线(\\)。
Sender
指定消息的发送者。建议Sender 和SendingMachine 一样,因为网络配置可能会拒绝发送该消息。当这条消息被显示出来时,该字符串会作为消息的发送者。
Message
指定消息本身。Sender 参数后面的所有文本都会被当作Message 的一部分,包括空格和引号,分号会结束Message并且开始一条新的命令。
DLL
Windows NT 4.0
|
Ext.dll
|
Windows 2000
|
Ext.dll
|
Windows XP和之后
|
Ext.dll
|
!obja
!obja 扩展命令显示对象管理器中某个对象的属性。
语法
!obja Address
参数
Address
指定要查看的对象头的16进制地址。
DLL
Windows NT 4.0
|
Ext.dll Kdextx86.dll
|
Windows 2000
|
Ext.dll Kdextx86.dll
|
Windows XP和之后
|
Ext.dll
|
注释
指定对象所具备的属性会被列举出来。合法的属性包括:
#define OBJ_INHERIT 0x00000002L
#define OBJ_PERMANENT 0x00000010L
#define OBJ_EXCLUSIVE 0x00000020L
#define OBJ_CASE_INSENSITIVE 0x00000040L
#define OBJ_OPENIF 0x00000080L
#define OBJ_OPENLINK 0x00000100L
#define OBJ_VALID_ATTRIBUTES 0x000001F2L
下面是一个示例:
kd> !obja 80967768
Obja +80967768 at 80967768:
OBJ_INHERIT
OBJ_PERMANENT
OBJ_EXCLUSIVE
附加信息
关于对象和对象管理器的更多信息,查看Microsoft Windows SDK 文档、Windows Driver Kit (WDK) 文档、以及Mark Russinovich 和David Solomon 编著的Microsoft Windows Internals。
!owner
!owner 扩展用于显示某个模块或者函数的所有者。
语法
!owner [Module[!Symbol]]
参数
Module
指定要查看所有者的模块。Module 后面如果带一个星号(*),则表示任意多个其他字符。
Symbol
指定要查看所有者的Module 模块中的符号。Symbol 后如果带一个星号 (*) ,表示任意多个其他字符。如果省略Symbol ,则显示整个模块的所有者。
DLL
Windows NT 4.0
|
Ext.dll
|
Windows 2000
|
Ext.dll
|
Windows XP和之后
|
Ext.dll
|
注释
如果没有使用参数并且发生了错误,!owner 会显示发生错误的模块或函数的所有者名字。
传递了模块或函数名给!owner 时,调试器会显示单词 Followup ,后面跟指定的模块或函数的所有者。
要该命令显示有用的信息,必须首先创建包含模块和函数所有者名字的triage.ini 文件。
triage.ini 文件的详细信息和!owner 命令的示例,查看指定模块和函数的所有者。
!peb
!peb 扩展显示进程环境块(PEB)信息的格式化形式。
语法
!peb [PEB-Address]
参数
PEB-Address
要查看的PEB的16进制地址。(不是从进程的内核进程块中获得的PEB地址。) 如果在用户模式下省略PEB-Address,则使用当前进程的PEB。如果在内核模式下省略,则显示当前进程上下文对应的PEB。
DLL
Windows NT 4.0
|
Kdextx86.dll Ntsdexts.dll
|
Windows 2000
|
Kdextx86.dll Ntsdexts.dll
|
Windows XP和之后
|
Exts.dll
|
注释
PEB是Microsoft Windows进程控制结构的用户模式部分。
如果内核模式下不带参数使用!peb 命令时出错,则需要用!process扩展命令来 获得需要的进程的PEB地址。 要确认进程上下文是设置成需要的进程的,并且将该PEB地址作为!peb的参数。
具体显示出来的输出根据不同的Windows版本以及是在内核模式还是用户模式下调试会有所不同。下面是一个附加到Windows Server 2003目标机上的内核调试器的输出示例:
kd> !peb
PEB at 7ffdf000
InheritedAddressSpace: No
ReadImageFileExecOptions: No
BeingDebugged: No
ImageBaseAddress: 4ad00000
Ldr 77fbe900
Ldr.Initialized: Yes
Ldr.InInitializationOrderModuleList: 00241ef8 . 00242360
Ldr.InLoadOrderModuleList: 00241e90 . 00242350
Ldr.InMemoryOrderModuleList: 00241e98 . 00242358
Base TimeStamp Module
4ad00000 3d34633c Jul 16 11:17:32 2002 D:\WINDOWS\system32\cmd.exe
77f40000 3d346214 Jul 16 11:12:36 2002 D:\WINDOWS\system32\ntdll.dll
77e50000 3d3484ef Jul 16 13:41:19 2002 D:\WINDOWS\system32\kernel32.dll
....
SubSystemData: 00000000
ProcessHeap: 00140000
ProcessParameters: 00020000
WindowTitle: 'D:\Documents and Settings\Administrator\Desktop\Debuggers.lnk'
ImageFile: 'D:\WINDOWS\system32\cmd.exe'
CommandLine: '"D:\WINDOWS\system32\cmd.exe" '
DllPath: 'D:\WINDOWS\system32;D:\WINDOWS\system32;....
Environment: 00010000
ALLUSERSPROFILE=D:\Documents and Settings\All Users
APPDATA=D:\Documents and Settings\UserTwo\Application Data
CLIENTNAME=Console
....
windir=D:\WINDOWS
类似的!teb 扩展命令用于显示线程环境块。
附加信息
关于进程环境块的更多信息,查看Mark Russinovich 和David Solomon 编写的Microsoft Windows Internals。
!psr
!psr 扩展显示Itanium处理器状态字(processor status word (PSR))。
语法
!psr PSR [DisplayLevel]
!psr @ipsr [DisplayLevel]
参数
PSR
指定要显示的PSR的16进制地址。
@ipsr
显示ipsr寄存器。
DisplayLevel
可以使下面选项中任意一个:
0
只显示每个PSR字段(field)的值。这是默认情况。
1
显示中包含非保留或者忽略的PSR字段的更深入的信息。
2
显示中包含所有的PSR字段的深入信息,包括忽略和保留(ignored or reserved)的那些。
DLL
Windows NT 4.0
|
不可用
|
Windows 2000
|
不可用
|
Windows XP和之后
|
Exts.dll
|
该命令只能在Itanium的目标机上使用。
注释
下面是两个例子:
0:000> !psr @ipsr
psr:ia bn ed ri ss dd da id it mc is cpl rt tb lp db
0 1 0 0 0 0 0 0 1 0 0 3 1 0 0 0
si di pp sp dfh dfl dt pk i ic | mfh mfl ac up be
0 0 1 0 0 0 1 0 1 1 | 0 1 0 0 0
kd> !psr @ipsr 1
be : 0 : Big-Endian
up : 0 : User Performance monitor enable
ac : 1 : Alignment Check
mfl : 1 : Lower floating-point registers written
mfh : 0 : Upper floating-point registers written
ic : 1 : Interruption Collection
i : 0 : Interrupt enable
pk : 0 : Protection Key enable
dt : 1 : Data Address Translation enable
dfl : 0 : Disabled Floating-point Low register set
dfh : 1 : Disabled Floating-point High register set
sp : 0 : Secure Performance monitors
pp : 1 : Privileged Performance monitor enable
di : 0 : Disable Instruction set transition
si : 0 : Secure Interval timer
db : 0 : Debug Breakpoint fault enable
lp : 0 : Lower Privilege transfer trap enable
tb : 0 : Taken Branch trap enable
rt : 1 : Register stack translation enable
cpl : 0 : Current Privilege Level
is : 0 : Instruction Set
mc : 0 : Machine Abort Mask delivery disable
it : 1 : Instruction address Translation enable
id : 0 : Instruction Debug fault disable
da : 0 : Disable Data Access and Dirty-bit faults
dd : 0 : Data Debug fault disable
ss : 0 : Single Step enable
ri : 0 : Restart Instruction
ed : 0 : Exception Deferral
bn : 1 : register Bank
ia : 0 : Disable Instruction Access-bit faults
附加信息
更多信息,查看Itanium 架构,或者Intel架构手册。
!rtlavl
!rtlavl 扩展显示某个RTL_AVL_TABLE 结构的条目。
语法
!rtlavl Address [Module!Type]
!rtlavl -?
参数
Address
指定要显示的RTL_AVL_TABLE 的地址。
Module
指定定义该数据结构的模块。
Type
指定数据结构的名字。
-?
在调试器命令窗口中显示该命令的简要帮助文本。
DLL
Windows NT 4.0
|
Ext.dll
|
Windows 2000
|
Ext.dll
|
Windows XP和之后
|
Ext.dll
|
注释
包含Module!Type 选项会使得列表中每个条目都被当成给定类型的。
任何时候通过按下CTRL+BREAK (WinDbg中) 或者CTRL+C (KD 或CDB中)都可以打断命令的输出。
附加信息
使用!gentable 扩展命令来显示AVL表。
!sd
!sd 显示指定地址处的安全描述符(security descriptor)。
语法
Windows NT 4.0 和Windows 2000中的语法:
!sd Address
Windows XP和之后的语法:
!sd Address [Flags]
参数
Address
指定SECURITY_DESCRIPTOR 结构的16进制地址。
Flags
(Windows XP 和之后) 如果设置为1,则显示更友好的名字。包括安全描述符(security identifier (SID))类型,以及该SID的域(domain)和用户名。
DLL
Windows NT 4.0
|
Kdextx86.dll
|
Windows 2000
|
Kdextx86.dll
|
Windows XP和之后
|
Exts.dll
|
注释
这里有一个例子:
kd> !sd e1a96a80 1
->Revision: 0x1
->Sbz1 : 0x0
->Control : 0x8004
SE_DACL_PRESENT
SE_SELF_RELATIVE
->Owner : S-1-5-21-518066528-515770016-299552555-2981724 (User: MYDOMAIN\myuser)
->Group : S-1-5-21-518066528-515770016-299552555-513 (Group: MYDOMAIN\Domain Users)
->Dacl :
->Dacl : ->AclRevision: 0x2
->Dacl : ->Sbz1 : 0x0
->Dacl : ->AclSize : 0x40
->Dacl : ->AceCount : 0x2
->Dacl : ->Sbz2 : 0x0
->Dacl : ->Ace[0]: ->AceType: ACCESS_ALLOWED_ACE_TYPE
->Dacl : ->Ace[0]: ->AceFlags: 0x0
->Dacl : ->Ace[0]: ->AceSize: 0x24
->Dacl : ->Ace[0]: ->Mask : 0x001f0003
->Dacl : ->Ace[0]: ->SID: S-1-5-21-518066528-515770016-299552555-2981724 (User: MYDOMAIN\myuser)
->Dacl : ->Ace[1]: ->AceType: ACCESS_ALLOWED_ACE_TYPE
->Dacl : ->Ace[1]: ->AceFlags: 0x0
->Dacl : ->Ace[1]: ->AceSize: 0x14
->Dacl : ->Ace[1]: ->Mask : 0x001f0003
->Dacl : ->Ace[1]: ->SID: S-1-5-18 (Well Known Group: NT AUTHORITY\SYSTEM)
->Sacl : is NULL
附加信息
关于该命令的应用和例子,查看查看对象的ACL。关于安全描述符的更多信息,查看 Microsoft Windows SDK文档、 Windows Driver Kit (WDK)文档、以及Mark Russinovich和David Solomon编写的 Microsoft Windows Internals。还可以参见!sid 和!acl。
!sid
!sid 扩展显示指定地址处的安全描述符 (SID)。
语法
Windows NT 4.0 和Windows 2000的语法:
!sid Address
Windows XP和之后的系统中的语法:
!sid Address [Flags]
参数
Address
指定SID结构的地址。
Flags
(Windows XP和之后) 如果设置为1,则SID类型、域和该SID的用户名都会显示出来。
(Windows XP and later) 如果设置为1,则显示更加友好的名字。包括安全描述符(SID)类型,以及该SID的域(domain)和用户名。
DLL
Windows NT 4.0
|
Kdextx86.dll
|
Windows 2000
|
Kdextx86.dll
|
Windows XP和之后
|
Exts.dll
|
注释
这里有两个示例,一个没有显示友好名,一个有显示:
kd> !sid 0xe1bf35b8
SID is: S-1-5-21-518066528-515770016-299552555-513
kd> !sid 0xe1bf35b8 1
SID is: S-1-5-21-518066528-515770016-299552555-513 (Group: MYGROUP\Domain Users)
附加信息
关于SID的更多信息,查看Microsoft Windows SDK 文档、Windows Driver Kit (WDK)文档,或者Mark Russinovich 和David Solomon编写的 Microsoft Windows Internals 。也可以参见!sd 和!acl。
!slist
!slist 扩展显示一个单链表(singly-linked list (SList))。
语法
!slist Address [ Symbol [Offset] ]
!slist -?
参数
Address
指定SLIST_HEADER 的地址。
Symbol
指定要用来显示的数据类型。如果指定了Symbol,调试器显示的时候会假定单链表中每个实例具有该数据类型。
Offset
指定单链表指针在该结构中的字节偏移。
-?
在调试器命令窗口中显示该命令的简要帮助文本。
DLL
Windows NT 4.0
|
不可用
|
Windows 2000
|
不可用
|
Windows XP和之后
|
Exts.dll
|
注释
如果知道链接的结构的类型,那么Symbol 和Offset 参数是非常有用的。要查看区别,这里有两个例子;第一个省略了Symbol 和Offset 参数,第二个包含了。
0:000> !slist ListHead
SLIST HEADER:
+0x000 Alignment : a000a002643e8
+0x000 Next : 2643e8
+0x004 Depth : a
+0x006 Sequence : a
SLIST CONTENTS:
002643e8 002642c0 0000000a 6e676953 72757461
002642c0 00264198 00000009 6e676953 72757461
00264198 00264070 00000008 6e676953 72757461
00264070 00263f48 00000007 6e676953 72757461
00263f48 00261420 00000006 6e676953 72757461
00261420 002612f8 00000005 6e676953 72757461
002612f8 002611d0 00000004 6e676953 72757461
002611d0 002610a8 00000003 6e676953 72757461
002610a8 00260f80 00000002 6e676953 72757461
00260f80 00000000 00000001 6e676953 72757461
0:000> !slist ListHead _PROGRAM_ITEM 0
SLIST HEADER:
+0x000 Alignment : a000a002643e8
+0x000 Next : 2643e8
+0x004 Depth : a
+0x006 Sequence : a
SLIST CONTENTS:
002643e8
+0x000 ItemEntry : _SINGLE_LIST_ENTRY
+0x004 Signature : 0xa
+0x008 Description : [260] "Signature is: 10"
002642c0
+0x000 ItemEntry : _SINGLE_LIST_ENTRY
+0x004 Signature : 9
+0x008 Description : [260] "Signature is: 9"
00264198
+0x000 ItemEntry : _SINGLE_LIST_ENTRY
+0x004 Signature : 8
+0x008 Description : [260] "Signature is: 8"
00264070
+0x000 ItemEntry : _SINGLE_LIST_ENTRY
+0x004 Signature : 7
+0x008 Description : [260] "Signature is: 7"
00263f48
+0x000 ItemEntry : _SINGLE_LIST_ENTRY
+0x004 Signature : 6
+0x008 Description : [260] "Signature is: 6"
00261420
+0x000 ItemEntry : _SINGLE_LIST_ENTRY
+0x004 Signature : 5
+0x008 Description : [260] "Signature is: 5"
002612f8
+0x000 ItemEntry : _SINGLE_LIST_ENTRY
+0x004 Signature : 4
+0x008 Description : [260] "Signature is: 4"
002611d0
+0x000 ItemEntry : _SINGLE_LIST_ENTRY
+0x004 Signature : 3
+0x008 Description : [260] "Signature is: 3"
002610a8
+0x000 ItemEntry : _SINGLE_LIST_ENTRY
+0x004 Signature : 2
+0x008 Description : [260] "Signature is: 2"
00260f80
+0x000 ItemEntry : _SINGLE_LIST_ENTRY
+0x004 Signature : 1
+0x008 Description : [260] "Signature is: 1"
cc682/NetRoc
http://netroc682.spaces.live.com/
!std_map
!std_map 扩展用来显示std::map 树的内容。
语法
!std_map Address [Module!Type [TypeSize]]
!std_map -?
参数
Address
指定要显示的std::map 树的地址。
Module
指定定义该数据结构的模块。
Type
指定数据结构的名字。必须是明确的Module!std::pair<Type1,Type2> 格式。如果使用了TypeSize参数,则这个参数必须包含在引号中。
TypeSize
指定数据结构的大小,以使得符号更加明确。
-?
在调试器命令窗口中显示该扩展的简短帮助文本。
DLL
Windows NT 4.0
|
Ext.dll
|
Windows 2000
|
Ext.dll
|
Windows XP和之后
|
Ext.dll
|
注释
包含Module!Type 选项使得表中的每个条目都被当作给定类型。
使用dt -ve (Module!std::pair<Type1,Type2>) 来显示可能的大小。
附加信息
要显示其它标准模板库 (STL)定义的模板,查看 !stl。
!stl
!stl 扩展命令显示一些已知的标准模板库(STL)的模板。
语法
!stl [Options] Template
!stl -?
参数
Options
可以包含任意的下面这些选项:
-v
显示详细输出。
-V
显示更加详细的输出,例如包含特定函数何时被调用以及何时返回这样的扩展命令执行过程的信息。
Template
指定要显示的模板的名字。
-?
在调试器命令窗口中显示简要的命令帮助文本。
DLL
Windows NT 4.0
|
不可用
|
Windows 2000
|
不可用
|
Windows XP和之后
|
Exts.dll
|
注释
只有在调试器的详细输出模式打开之后,详细输出的选项才能起作用。
该扩展命令当前支持的STL模板包括:string、 wstring、 vector<string>、 vector<wstring>、 list<string>、 list<wstring>、以及任何指向前面这几个类型的指针。
!str
!str 扩展命令显示ANSI_STRING 或OEM_STRING 结构。
语法
!str Address
参数
Address
指定ANSI_STRING 或OEM_STRING 结构的16进制地址。
DLL
Windows NT 4.0
|
Ext.dll
|
Windows 2000
|
Ext.dll
|
Windows XP和之后
|
Ext.dll
|
注释
ANSI 字符串包含的是8位的字符,用下面的结构定义:
typedef struct _STRING {
USHORT Length;
USHORT MaximumLength;
PCHAR Buffer;
} STRING;
typedef STRING ANSI_STRING;
typedef STRING OEM_STRING;
如果字符串是NULL结尾的,Length 不能包含尾部的NULL。
附加信息
关于ANSI_STRING 结构的更多信息,查看Microsoft Windows SDK文档。
!sym
!sym 扩展控制显示详细的符号加载和符号提示。
语法
!sym
!sym noisy
!sym quiet
!sym prompts
!sym prompts off
参数
noisy
激活详细符号加载(noisy symbol loading)。
quiet
禁止详细符号加载。
prompts
当SymSrv 接收到认证请求时,允许弹出对话框。
prompts off
禁止SymSrv 在接收到认证请求时显示认证对话框。这可能使得SymSrv 不能通过internet访问符号。
DLL
Windows NT 4.0
|
Dbghelp.dll
|
Windows 2000
|
Dbghelp.dll
|
Windows XP和之后
|
Dbghelp.dll
|
注释
如果不带参数使用!sym ,则显示当前的详细符号加载和符号提示的设置状态。
!sym noisy 和!sym quiet 扩展命令用来控制详细符号加载。关于其它显示和修改该选项的方法,查看SYMOPT_DEBUG。
!sym prompts 和!sym prompts off 扩展用来控制SymSrv接收到认证请求时是否弹出认证对话框。这些命令之后必须再使用.reload (Reload Module) 才能起效。认证请求可能是由代理服务器、internet防火墙、智能卡读卡器(smart card readers),以及安全页面(secure websites)发起的。关于其它显示和修改该选项的方法,查看防火墙和代理服务器。
注意 详细符号加载不能和详细源码加载混淆 — 它是使用.srcnoisy (Noisy Source Loading) 命令来控制的。
!symsrv
!symsrv 命令关闭符号服务器客户端(symbol server client)。
语法
!symsrv close
DLL
Windows NT 4.0
|
Dbghelp.dll
|
Windows 2000
|
Dbghelp.dll
|
Windows XP和之后
|
Dbghelp.dll
|
注释
!symsrv close 会关闭任何活动的符号服务器客户端。
这在重新同步连接时有用。
如果之前拒绝过internet的认证请求,需要使用!symsrv close来重新连接符号存储。查看 防火墙和代理服务器获得详细信息。
!teb
!teb 扩展以的格式化后的形式显示线程环境块(TEB)的信息。
语法
!teb [TEB-Address]
参数
TEB-Address
要查看的TEB 的16进制地址。(这不是从该线程在内核的线程块中获得的TEB。) 如果在用户模式下省略TEB-Address,则使用当前进程的TEB。如果在内核模式下省略,则显示当前寄存器上下文对应的TEB。
DLL
Windows NT 4.0
|
Kdextx86.dll Ntsdexts.dll
|
Windows 2000
|
Kdextx86.dll Ntsdexts.dll
|
Windows XP和之后
|
Exts.dll
|
注释
TEB是用户模式下的Microsoft Windows线程控制结构。
如果在内核模式下不带参数使用 !teb 出现错误,则应该用!process扩展来查看需要的线程的TEB地址。确认寄存器上下文是设置成需要的线程的,然后再将该TEB地址用作!teb 的参数。
下面是在用户模式下使用该命令的一个例子:
0:001> ~
0 id: 324.458 Suspend: 1 Teb 7ffde000 Unfrozen
. 1 id: 324.48c Suspend: 1 Teb 7ffdd000 Unfrozen
0:001> !teb
TEB at 7FFDD000
ExceptionList: 76ffdc
Stack Base: 770000
Stack Limit: 76f000
SubSystemTib: 0
FiberData: 1e00
ArbitraryUser: 0
Self: 7ffdd000
EnvironmentPtr: 0
ClientId: 324.48c
Real ClientId: 324.48c
RpcHandle: 0
Tls Storage: 0
PEB Address: 7ffdf000
LastErrorValue: 0
LastStatusValue: 0
Count Owned Locks:0
HardErrorsMode: 0
类似的 !peb 扩展命令用于显示进程环境块。
附加信息
关于线程环境块的更多信息,查看Mark Russinovich 和David Solomon 编著的Microsoft Windows Internals 。
!tls
!tls 扩展命令用于显示一个线程本地存储槽(TLS slot)。
语法
!tls Slot [TEB]
参数
Slot
指定TLS slot。可以是0到1088之间的任何10进制值。如果Slot 是-1,则显示所有slot。
TEB
指定线程环境块(TEB)。如果为0或者省略,则使用当前线程。
DLL
Windows NT 4.0
|
不可用
|
Windows 2000
|
不可用
|
Windows XP和之后
|
Exts.dll
|
注释
这里有一个例子:
0:000> !tls -1
TLS slots on thread: c08.f54
0x0000 : 00000000
0x0001 : 003967b8
0:000> !tls 0
c08.f54: 00000000
!token
!token 扩展命令用来显示格式化后的安全令牌对象(security token object)的信息。
语法
Windows NT 4.0 和Windows 2000的语法 (内核模式)
!token [Address]
Windows XP和之后系统中,内核模式:
!token [-n] [Address]
!token -?
Windows XP和之后系统,用户模式:
!token [-n] [Handle]
!token -?
参数
Address
(仅内核模式) 指定要显示的令牌的地址。如果为0 或省略,则显示活动线程的令牌。
Handle
(仅用户模式) 指定要显示的令牌的句柄。如果为0或者省略,则显示目标进程关联的令牌。
-n
(Windows XP 和之后;仅用户模式) 显示更加友好的名字。包括安全描述符(SID)类型,以及SID的域和用户名。该选项在调试LSASS时不能使用。
-?
(Windows XP 和之后) 在调试器命令窗口中显示简要的命令帮助文本。
DLL
Windows NT 4.0
|
Kdextx86.dll
|
Windows 2000
|
Kdextx86.dll
|
Windows XP和之后
|
Exts.dll
|
在Windows NT 4.0 和Windows 2000中, !token仅在内核调试时可用。在Windows XP和之后的操作系统中, !token 可以在内核调试和用户模式活动调试时使用。调试用户模式dump文件时不能使用。
注释
TOKEN 结构用来代表一个已认证的用户进程的安全对象类型。每个进程都被指派了一个令牌,作为该进程中所有线程的默认令牌。但是每个单独线程都可以指派一个令牌来重载默认的那个。
可以从!process的输出中得到令牌的地址。要显示TOKEN结构的每个单独字段的清单,可以在Windows NT 4.0或者Windows 2000中使用 !tokenfields 扩展命令,或者在Windows XP或之后的系统中使用 dt nt!_TOKEN 命令。
下面是一个例子:
kd> !process 81464da8 1
PROCESS 81464da8 SessionId: 0 Cid: 03bc Peb: 7ffdf000 ParentCid: 0124
DirBase: 0dec2000 ObjectTable: e1a31198 TableSize: 275.
Image: MSMSGS.EXE
VadRoot 81468cc0 Vads 170 Clone 0 Private 455. Modified 413. Locked 0.
DeviceMap e1958438
Token e1bed030
ElapsedTime 0:44:15.0142
UserTime 0:00:00.0290
KernelTime 0:00:00.0300
QuotaPoolUsage[PagedPool] 49552
QuotaPoolUsage[NonPagedPool] 10872
Working Set Sizes (now,min,max) (781, 50, 345) (3124KB, 200KB, 1380KB)
PeakWorkingSetSize 1550
VirtualSize 57 Mb
PeakVirtualSize 57 Mb
PageFaultCount 2481
MemoryPriority BACKGROUND
BasePriority 8
CommitCharge 2497
kd> !exts.token -n e1bed030
_TOKEN e1bed030
TS Session ID: 0
User: S-1-5-21-518066528-515770016-299552555-2981724 (User: MYDOMAIN\myuser)
Groups:
00 S-1-5-21-518066528-515770016-299552555-513 (Group: MYDOMAIN\Domain Users)
Attributes - Mandatory Default Enabled
01 S-1-1-0 (Well Known Group: localhost\Everyone)
Attributes - Mandatory Default Enabled
02 S-1-5-32-544 (Alias: BUILTIN\Administrators)
Attributes - Mandatory Default Enabled Owner
03 S-1-5-32-545 (Alias: BUILTIN\Users)
Attributes - Mandatory Default Enabled
04 S-1-5-21-518066528-515770016-299552555-2999049 (Group: MYDOMAIN\AllUsers)
Attributes - Mandatory Default Enabled
05 S-1-5-21-518066528-515770016-299552555-2931095 (Group: MYDOMAIN\SomeGroup1)
Attributes - Mandatory Default Enabled
06 S-1-5-21-518066528-515770016-299552555-2931096 (Group: MYDOMAIN\SomeGroup2)
Attributes - Mandatory Default Enabled
07 S-1-5-21-518066528-515770016-299552555-3014318 (Group: MYDOMAIN\SomeGroup3)
Attributes - Mandatory Default Enabled
08 S-1-5-21-518066528-515770016-299552555-3053352 (Group: MYDOMAIN\Another Group)
Attributes - Mandatory Default Enabled
09 S-1-5-21-518066528-515770016-299552555-2966661 (Group: MYDOMAIN\TestGroup)
Attributes - Mandatory Default Enabled
10 S-1-5-21-2117033040-537160606-1609722162-17637 (Group: MYOTHERDOMAIN\someusers)
Attributes - Mandatory Default Enabled
11 S-1-5-21-518066528-515770016-299552555-3018354 (Group: MYDOMAIN\TestGroup2)
Attributes - Mandatory Default Enabled
12 S-1-5-21-518066528-515770016-299552555-3026602 (Group: MYDOMAIN\SomeGroup4)
Attributes - Mandatory Default Enabled
13 S-1-5-21-518066528-515770016-299552555-2926570 (Group: MYDOMAIN\YetAnotherGroup)
Attributes - Mandatory Default Enabled
14 S-1-5-21-661411660-2927047998-133698966-513 (Group: MYDOMAIN\Domain Users)
Attributes - Mandatory Default Enabled
15 S-1-5-21-518066528-515770016-299552555-2986081 (Alias: MYDOMAIN\an_alias)
Attributes - Mandatory Default Enabled GroupResource
16 S-1-5-21-518066528-515770016-299552555-3037986 (Alias: MYDOMAIN\AReallyLongGroupName1)
Attributes - Mandatory Default Enabled GroupResource
17 S-1-5-21-518066528-515770016-299552555-3038991 (Alias: MYDOMAIN\AReallyLongGroupName2)
Attributes - Mandatory Default Enabled GroupResource
18 S-1-5-21-518066528-515770016-299552555-3037999 (Alias: MYDOMAIN\AReallyLongGroupName3)
Attributes - Mandatory Default Enabled GroupResource
19 S-1-5-21-518066528-515770016-299552555-3038983 (Alias: MYDOMAIN\AReallyReallyLongGroupName)
Attributes - Mandatory Default Enabled GroupResource
20 S-1-5-5-0-71188 (no name mapped)
Attributes - Mandatory Default Enabled LogonId
21 S-1-2-0 (Well Known Group: localhost\LOCAL)
Attributes - Mandatory Default Enabled
22 S-1-5-4 (Well Known Group: NT AUTHORITY\INTERACTIVE)
Attributes - Mandatory Default Enabled
23 S-1-5-11 (Well Known Group: NT AUTHORITY\Authenticated Users)
Attributes - Mandatory Default Enabled
Primary Group: S-1-5-21-518066528-515770016-299552555-513 (Group: MYDOMAIN\Domain Users)
Privs:
00 0x000000017 SeChangeNotifyPrivilege Attributes - Enabled Default
01 0x000000008 SeSecurityPrivilege Attributes -
02 0x000000011 SeBackupPrivilege Attributes -
03 0x000000012 SeRestorePrivilege Attributes -
04 0x00000000c SeSystemtimePrivilege Attributes -
05 0x000000013 SeShutdownPrivilege Attributes -
06 0x000000018 SeRemoteShutdownPrivilege Attributes -
07 0x000000009 SeTakeOwnershipPrivilege Attributes -
08 0x000000014 SeDebugPrivilege Attributes -
09 0x000000016 SeSystemEnvironmentPrivilege Attributes -
10 0x00000000b SeSystemProfilePrivilege Attributes -
11 0x00000000d SeProfileSingleProcessPrivilege Attributes -
12 0x00000000e SeIncreaseBasePriorityPrivilege Attributes -
13 0x00000000a SeLoadDriverPrivilege Attributes - Enabled
14 0x00000000f SeCreatePagefilePrivilege Attributes -
15 0x000000005 SeIncreaseQuotaPrivilege Attributes -
16 0x000000019 SeUndockPrivilege Attributes - Enabled
17 0x00000001c SeManageVolumePrivilege Attributes -
Authentication ID: (0,11691)
Impersonation Level: Anonymous
TokenType: Primary
Source: User32 TokenFlags: 0x9 ( Token in use )
Token ID: 18296 ParentToken ID: 0
Modified ID: (0, 18298)
RestrictedSidCount: 0 RestrictedSids: 00000000
附加信
关于内核模式TOKEN结构的更多信息,查看Mark Russinovich 和David Solomon编写的Microsoft Windows Internals。用户模式下TOKEN结构的更多信息,查看Microsoft Windows SDK 文档。
!tp
!tp 扩展用于显示线程池的信息。
语法
!tp pool Address [Flags]
!tp tqueue Address [Flags]
!tp ItemType Address [Flags]
!tp ThreadType [Address]
!tp -?
参数
Address
指定一个地址。
pool
显示位于Address 的整个线程池。如果Address是0,则显示所有的线程池。
tqueue
显示位于Address 的活动定时器队列(active timer queue)。
ItemType
指定要显示的线程池项(item)的类型。ItemType可以包含任意的下面这些可能的值:
obj
显示常规的内存池项 (例如IO项)。
timer
显示定时器项。
wait
显示等待项(wait item)。
work
显示工作项(work item)。
ThreadType
指定要显示的线程的类型。如果包含了Address,则只会显示该地址处的线程。 如果Address 为0,则指定类型的所有线程都会显示出来。如果省略Address,只显示当前线程(疑为进程 — 译者)关联的线程。ThreadType 可以包含任意下面这些可能的值:
waiter
显示线程池等待者线程(thread pool waiter thread)。
worker
显示线程池工作者线程(thread pool worker thread)。
Flags
指定显示中要包含的内容。可以是下面这些位值的和 (默认值为0x0):
Bit 0 (0x1)
单行显示。当显示ItemType 时,这一位的设置无效。
Bit 1 (0x2)
显示中包含成员信息(member information)。
Bit 2 (0x4)
显示中包含池工作队列(pool work queue)。这一位只有使用pool标志时才有意义。
-?
在调试器命令窗口中显示该扩展命令的简单帮助文本。
DLL
Windows NT 4.0
|
不可用
|
Windows 2000
|
不可用
|
Windows XP和之后
|
Exts.dll
|
附加信息
关于线程池的更多信息,查看Microsoft Windows SDK 文档。
!triage
!triage 扩展命令已经废除。使用!analyze 来替代。
!ustr
!ustr 扩展命令显示UNICODE_STRING结构。
语法
!ustr Address
参数
Address
指定UNICODE_STRING 结构的16进制地址。
DLL
Windows NT 4.0
|
Ext.dll
|
Windows 2000
|
Ext.dll
|
Windows XP和之后
|
Ext.dll
|
注释
Unicode 字符串是由16位字符组成的,下面是结构的定义:
typedef struct _UNICODE_STRING {
USHORT Length;
USHORT MaximumLength;
PWSTR Buffer;
} UNICODE_STRING;
如果字符串是NULL结尾,则Length 不能包含NULL字符。
大多数Win32字符串参数在实际使用前都会转换成Unicode字符串。
附加信息
UNICODE_STRING 结构的更多信息,查看Microsoft Windows SDK文档。
!version
!version 扩展命令显示扩展DLL的版本信息。
该命令不能和 version (Show Debugger Version) 命令混淆。
语法
![ExtensionDLL.]version
参数
ExtensionDLL
指定要显示版本号的扩展DLL。
DLL
大多数扩展DLL都支持该命令。
注释
如果扩展DLL的版本和调试器版本不匹配,则会显示错误信息。
该命令在Windows XP和之后版本的Windows中都不支持。要显示版本信息,应该使用version (Show Debugger Version) 命令。
该扩展命令原本的意图是用来确认DLL版本和目标版本匹配,因为在很多扩展中版本不匹配都会造成错误的结果。新的DLL不再限制为只支持一个版本的Windows,所以这个扩展命令已经废除。