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,所以这个扩展命令已经废除。