目录
1. !acl (Access Control List)(访问控制列表)
26.1 !for_each_frame(每帧执行调试命令)
26.2 !for_each_function (每函数执行调试命令)
26.3 !for_each_local(每局部变量执行调试命令)
26.4 !for_each_module(每模块执行调试命令)
26.5 !for_each_register(每寄存器执行调试命令)
48. !rtlavl (显示 RTL_AVL_TABLE 结构的条目)
本节介绍用户模式和内核模式调试中常用的扩展命令。调试器会自动加载这些扩展命令的正确版本。除非你手动加载了不同的版本,否则无需跟踪正在使用的 DLL 版本。每一个扩展命令参考主题都列出了公开该命令的 DLL。请使用以下规则确定要从中加载此扩展 DLL 的正确目录:
如果目标计算机运行的是 Microsoft Windows XP 或更高版本的 Windows,请使用 winxp\kdexts.dll、winxp\ntsdexts.dll、winxp\exts.dll、winext\ext.dll 或 dbghelp.dll。
若要手动改变,可以加上扩展DLL的名称作为前缀,例如:
0:000> !Ext.analyze -v
0:000> !Ext.exchain
0:000> !kdexts.help
0:000> !ntsdexts.help
详细参数说明请参见链接:
https://learn.microsoft.com/en-us/windows-hardware/drivers/debuggercmds/general-extensions
或者在 windbg 命令窗口中输入 .hh 命令打帮 Debugger 帮助文档。
1. !acl (Access Control List)(访问控制列表)
!acl 命令用于格式化和显示访问控制列表 (ACL) 的内容。
!acl Address [Flags]
1.1 参数
(1) Address
指定 ACL 的十六进制地址。
(2) Flags
如果 Flags 的值为 1,则显示 ACL 的友好名称。此友好名称包括安全标识符 (SID) 类型以及 SID 的域和用户名。
1.2 DLL
Exts.dll
1.3 评注
以下示例展示了 !acl 。
kd> !acl e1bf35d4 1
ACL is:
ACL is: ->AclRevision: 0x2
ACL is: ->Sbz1 : 0x0
ACL is: ->AclSize : 0x40
ACL is: ->AceCount : 0x2
ACL is: ->Sbz2 : 0x0
ACL is: ->Ace[0]: ->AceType: ACCESS_ALLOWED_ACE_TYPE
ACL is: ->Ace[0]: ->AceFlags: 0x0
ACL is: ->Ace[0]: ->AceSize: 0x24
ACL is: ->Ace[0]: ->Mask : 0x10000000
ACL is: ->Ace[0]: ->SID: S-1-5-21-518066528-515770016-299552555-2981724 (User: MYDOMAIN\myuser)
ACL is: ->Ace[1]: ->AceType: ACCESS_ALLOWED_ACE_TYPE
ACL is: ->Ace[1]: ->AceFlags: 0x0
ACL is: ->Ace[1]: ->AceSize: 0x14
ACL is: ->Ace[1]: ->Mask : 0x10000000
ACL is: ->Ace[1]: ->SID: S-1-5-18 (Well Known Group: NT AUTHORITY\SYSTEM)
2. !address (显示目标进程或计算机使用之内存)
!address 显示有关目标进程或目标计算机使用的内存的信息。
(1) 用户模式
!address Address
!address -summary
!address [-f:F1,F2,...] {[-o:{csv | tsv | 1}] | [-c:"Command"]}
!address -? | -help
(2) 内核模式
!address Address
!address
2.1 参数
(1) Address
仅显示地址空间中包含 Address 的区域。
(2) -Summary
仅显示概要信息。
(3) -f:F1, F2, ...
仅显示由过滤器 F1、F2 等指定的区域。
2.2 DLL
Ext.dll
3. !analyze (显示异常或错误检查信息)
!analyze 程序会显示有关当前异常或错误检查的信息。
(1) 用户模式
!analyze [-v[0..99]] [-f | -hang]
!analyze [-v[0..99]] -xml [-xmi] [-xcs] [-xmf OutputXmlFile]
!analyze -c [-load KnownIssuesFile | -unload | -help ]
(2) 内核模式
!analyze [-v[0..99]] [-f | -hang]
!analyze -show BugCheckCode [BugParameters]
!analyze [-v[0..99]] -xml [-xmi] [-xcs] [-xmf OutputXmlFile]
!analyze -c [-load KnownIssuesFile | -unload | -help ]
3.1 一般参数
(1) -v[0..99](-v可以看成view的首字母)
显示详细输出。你可以通过指定 0 到 99 之间的数字来显示更多信息。如果你未指定数字,则默认值为 1。你还可以指定“非常详细”(-vv)来显示所有可用信息。在用户模式下,-v6 将显示全局和每个线程中发现的信息。
(2) -f
生成 !analyze 异常输出。即使调试器未检测到异常,也可以使用此参数查看异常分析。
(3) -hang
生成 !analyze hung-application 的输出。当目标系统遇到错误检查或异常时,请使用此参数。但是,分析应用程序挂起的原因对你的问题更为重要。在内核模式下,!analyze -hang 会检查系统持有的锁,然后扫描 DPC 队列链。在用户模式下,!analyze -hang 会分析线程栈,以确定是否有线程阻塞其他线程。
在用户模式下运行此之前,请考虑将当前线程更改为你认为已停止响应(即挂起)的线程。你应该进行此更改,因为异常可能已将当前线程更改为其他线程。
3.2 显示参数
-show BugCheckCode [BugParameters]
显示由 BugCheckCode 指定的错误检查的相关信息。BugParameters 最多可指定四个错误检查参数,参数之间用空格分隔。这些参数可用于进一步细化搜索。
3.3 继续异常参数
(1) -c
当调试器遇到已知问题时,程序将继续执行。如果遇到的不是已知问题,调试器将保持在目标程序中断状态。
你可以使用带有以下子参数的 -c 选项。这些子参数用于配置已知问题列表。它们本身不会触发程序执行。在你至少运行一次 `!analyze -c **** -load` 之前,`!analyze -c` 不会生效。
(2) -load KnownIssuesFile
加载指定的已知问题文件。KnownIssuesFile 指定该文件的路径和文件名。该文件必须为 XML 格式。
KnownIssuesFile 文件中的已知问题列表将用于所有后续的 -c 命令,直到你使用 -c -unload 或再次使用 -c -load(此时新数据将替换旧数据)。
(3) -unload
卸载当前已知问题列表。
(4) -help
在调试器命令窗口中显示 !analyze -c 命令的帮助信息。
3.4 DLL
Ext.dll
4. !asd (显示故障条目)
!asd 会显示从指定地址开始的数据缓存中指定数量的故障分析条目。
!asd Address DataUsed
4.1 DLL
Ext.dll
5. !atom (显示格式化原子表)
!atom 程序显示指定原子或当前进程所有原子的格式化原子表。
!atom [Address]
5.1 DLL
Exts.dll
6. !bitcount (位数量计算)
!bitcount 扩展程序统计内存范围内“1”位的数量。
!bitcount StartAddress TotalBits
6.1 DLL
Exts.dll
7. !blackboxbsd(视条件显示启动状态数据)
!blackboxbsd 程序会在内核模式转储文件中存在缓存的启动状态数据 (BSD) 信息时显示这些信息。该信息取自发生错误检查时保存的内核模式转储文件中的缓存数据,但并非始终可用。
!blackboxbsd
7.1 DLL
Ext.dll
8. !blackboxscm(视条件显示SCM信息)
!blackboxscm 程序会在内核模式转储文件中存在服务控制管理器 (SCM) 信息时显示这些信息。该扩展程序会显示所有存在未完成服务控制请求的服务的名称。这些信息是从发生错误检查时保存的内核模式转储文件中的缓存数据中检索的,但并非始终可用。
!blackboxscm
8.1 DLL
Ext.dll
9. !chksym(测试模块有效性)
!chksym 程序会根据符号文件测试模块的有效性。
!chksym Module [Symbol]
9.1 DLL
Windows 2000:Unavailable
Windows XP:Unavailable
Windows Vista and later:Dbghelp.dll
10. !chkimg(检测文件映像)
!chkimg 程序通过将可执行文件映像与符号存储或其他文件存储库中的副本进行比较来检测映像中的损坏情况。
!chkimg [Options] [-mmw LogFile LogOptions] [Module]
10.1 DLL
Ext.dll
11. !cppexr(显示C++异常)
!cppexr 名显示 C++ 异常记录的内容。
!cppexr Address
11.1 DLL
Ext.dll
12. !cppexr(显示C++异常)
!cppexr 名显示 C++ 异常记录的内容。
!cppexr Address
12.1 DLL
Ext.dll
13. !cpuid(显示处理器信息)
!cpuid 名显示有关系统处理器的信息。
!cpuid [Processor]
13.1 DLL
Ext.dll
14. !cs(显示临界区)
!cs 名显示一个或多个临界区或整个临界区树。
!cs [-s] [-l] [-o]
!cs [-s] [-o] Address
!cs [-s] [-l] [-o] StartAddress EndAddress
!cs [-s] [-o] -d InfoAddress
!cs [-s] -t [TreeAddress]
!cs -?
14.1 DLL
Exts.dll
15. !cxr(显示处理器信息)
!cxr 命令已过时。请改用 .cxr(显示上下文记录)命令。
16. !dh(显示图像头)
!dh 名显示指定图像的标头。
!dh [Options] Address
!dh -h
16.1 DLL
Windows 2000:Dbghelp.dll, Kdextx86.dll ,Ntsdexts.dll
Windows XP and later:Dbghelp.dll
17. !dlls(显示加载或使用的dll模块)
!dlls 名显示所有已加载模块或指定线程或进程正在使用的所有模块的表条目。
!dlls [Options] [LoaderEntryAddress]
!dlls -h
17.1 DLL
Exts.dll
18. !dml_proc(显示进程列表)
!dml_proc 显示进程列表,并提供链接以获取有关进程的更多详细信息。
!dml_proc
19. !dumpfa(显示故障分析)
!dumpfa 程序显示故障分析条目的内容。
!dumpfa Address
19.1 DLL
Ext.dll
20. !envvar(显示环境变量)
!envvar 名显示指定环境变量的值。
!envvar Variable
20.1 DLL
Exts.dll
21. !error(显示错误信息)
!error 用于解码和显示有关错误值的信息。
!error Value [Flags]
21.1 DLL
Ext.dll
22. !exchain(显示异常处理程序链)
!exchain 显示当前异常处理程序链。
!exchain [Options]
22.1 DLL
Ext.dll
23. !exchain(显示异常处理程序链)
!exchain 扩显示当前异常处理程序链。
!exchain [Options]
23.1 DLL
Ext.dll
24. !exr(显示异常处理程序链)
!exr 命令已过时。请改用 .exr(显示异常记录)命令。
25. !findxmldata(查找xml数据)
!findxmldata 程序从包含内核模式小内存转储文件的 CAB 文件中检索 XML 数据。
!findxmldata [ -d DeviceName | -h HwId ]
!findxmldata -r Driver
!findxmldata -chksum [ -z CabFile ]
!findxmldata -v
25.1 DLL
Ext.dll
26. !for_each_*命令(执行调试命令方法)
26.1 !for_each_frame(每帧执行调试命令)
!for_each_frame 会对当前线程栈中的每一帧执行一次调试器命令。
!for_each_frame ["CommandString"]
!for_each_frame -?
26.2 !for_each_function (每函数执行调试命令)
!for_each_function 会对指定模块中名称与指定模式匹配的每个函数执行调试器命令。
!for_each_function -m:ModuleName -p:Pattern -c:CommandString
!for_each_function -?
26.3 !for_each_local(每局部变量执行调试命令)
!for_each_local 会对当前帧中的每个局部变量执行一次调试器命令。
!for_each_local ["CommandString"]
!for_each_local -?
26.4 !for_each_module(每模块执行调试命令)
!for_each_module 会对每一个已加载的模块执行一次调试器命令。
!for_each_module ["CommandString"]
!for_each_module -?
26.5 !for_each_register(每寄存器执行调试命令)
!for_each_register 会对每个寄存器执行指定的命令。
!for_each_register -c:CommandString
!for_each_register -?
26.6 DLL
Ext.dll
27. !gflag(每局部变量执行调试命令)
!gflag 扩展用于设置或显示全局标志。
!gflag [+|-] Value
!gflag {+|-} Abbreviation
!gflag -?
!gflag
27.1 DLL
Exts.dll
28. !gle(显示当前线程最后一个错误值)
!gle [-all]
28.1 DLL
Exts.dll
29. !gs(分析 /GS 栈溢出)
!gs
29.1 DLL
Ext.dll
30. !gs(分析 /GS 栈溢出)
!gs
30.1 DLL
Ext.dll
31. !handle(显示进程句柄)
!handle 扩展显示目标系统中一个或多个进程拥有的句柄信息。
(1) 用户模式
!handle [Handle [UMFlags [TypeName]]]
!handle -?
(2) 内核模式
!handle [Handle [KMFlags [Process [TypeName]]]]
32. !heap(堆操作)(重要且常用)
!heap用于显示堆内存使用情况信息、控制堆管理器中的断点、检测泄漏的堆内存块、搜索堆内存块或显示页堆信息。
此扩展程序支持段堆和 NT 堆。使用不带任何参数的 !heap 命令可以列出所有堆及其类型。
!heap [HeapOptions] [ValidationOptions] [Heap]
!heap -b [{alloc|realloc|free} [Tag]] [Heap | BreakAddress]
!heap -B {alloc|realloc|free} [Heap | BreakAddress]
!heap -l
!heap -s [SummaryOptions] [StatHeapAddress]
!heap -i HeapAddress
!heap -x [-v] Address
!heap -p [PageHeapOptions]
!heap -srch [Size] Pattern
!heap -flt FilterOptions
!heap -stat [-h Handle [-grp GroupBy [MaxDisplay]]]
!heap [-p] -?
!heap -triage [Handle | Address]
32. !help(扩展命令之帮助命令)
!help会显示帮助文本,其中描述了从扩展程序 DLL 导出的扩展命令。
请勿将此扩展命令与 ?(命令帮助)或 .help(逾命令帮助)命令混淆。
![ExtensionDLL.]help [-v] [CommandName]
33. !homedir(设置默认目录)
!homedir设置符号服务器和源服务器使用的默认目录。
!homedir Directory
!homedir
33.1 DLL
Dbghelp.dll
34. !hstring(显示 HSTRING)
!hstring 扩展会显示 HSTRING 的各个字段。显示的最后一项是字符串本身。
!hstring Address
35. !hstring2(显示更多 HSTRING)
!hstring2 显示整个 HSTRING,包括字符串本身中嵌入的任何 NULL 字符。
36. !htrace(显示句柄栈跟踪)
!htrace 扩展程序显示一个或多个句柄的堆跟踪信息。
(1) 用户模式
!htrace [Handle [Max_Traces]]
!htrace -enable [Max_Traces]
!htrace -snapshot
!htrace -diff
!htrace -disable
!htrace -?
(2) 内核模式
!htrace [Handle [Process [Max_Traces]]]
!htrace -?
36.1 DLL
Windows XP 及更高版本:
Kdexts.dll,Ntsdexts.dll
37. !imggp(显示64位映像全局指针目录条目值)
!imggp显示 64 位映像的全局指针 (GP) 目录条目值。
!imggp Address
37.1 DLL
Ext.dll
38. !imgreloc(显示模块重定位前的地址)
!imgreloc显示每个已加载模块的地址,并指示它们在重定位之前的地址。
!imgreloc Address
38.1 DLL
Ext.dll
39. !kuser(显示共享用户模式页面)
!kuser 显示共享用户模式页面 (KUSER_SHARED_DATA)。
!kuser
例如:
0:000> !kuser
_KUSER_SHARED_DATA at 000000007ffe0000
TickCount: fa00000 * 0000000000af1a05 (2:01:48:24.078)
TimeZone Id: 0
ImageNumber Range: [8664 .. 8664]
Crypto Exponent: 0
SystemRoot: 'C:\windows'
BootId: 63
39.1 DLL
Exts.dll
40. !list(重复执行调试器命令)
!list 重复执行指定的调试器命令,对链表中的每个元素执行一次。
!list -t [Module!]Type.Field -x "Commands" [-a "Arguments"] [Options] StartAddress
!list " -t [Module!]Type.Field -x \"Commands\" [-a \"Arguments\"] [Options] StartAddress "
!list -h
40.1 DLL
Ext.dll
41. !lmi(显示指定模块的详情)
!lmi 显示有关模块的详细信息。
!lmi Module
41.1 DLL
Dbghelp.dll
42. !lui(显示多语言用户界面缓存详情)
!mui 显示多语言用户界面 (MUI) 缓存信息。
!mui -c
!mui -s
!mui -r ModuleAddress
!mui -i
!mui -f
!mui -t
!mui -u
!mui -d ModuleAddress
!mui -e ModuleAddress
!mui -?
42.1 DLL
Windows XP:Unavailable
Windows Vista 及其后版本:Exts.dll
44. !obja(在对象管理器中显示对象属性)
!obja 用于在对象管理器中显示对象的属性。
!obja Address
44.1 DLL
Ext.dll
45. !owner(显示模块或函数的拥有者)
!owner显示模块或函数的拥有者。
!owner [Module[!Symbol]]
45.1 DLL
Ext.dll
46. !peb(显示过程环境块中信息的格式化视图)
!peb 显示过程环境块 (PEB) 中信息的格式化视图。
!peb [PEB-Address]
46.1 DLL
Exts.dll
47. !rebase(搜索指定地址或符号)
!rebase 会在 rebase.log 文件中搜索指定的地址或符号。
!rebase [-r] Address [Path]
!rebase Symbol [Path]
!rebase -stack [Path]
!rebase -?
47.1 DLL
Ext.dll
48. !rtlavl (显示 RTL_AVL_TABLE 结构的条目)
!rtlavl 显示 RTL_AVL_TABLE 结构的条目。
!rtlavl Address [Module!Type]
!rtlavl -?
48.1 DLL
Ext.dll
49. !sd (显示指定地址的安全描述符)
!sd 显示指定地址的安全描述符。
!sd Address [Flags]
49.1 DLL
Exts.dll
50. !sd (显示指定地址的安全描述符)
!sd 显示指定地址的安全描述符。
!sd Address [Flags]
50.1 DLL
Exts.dll
51. !sid (显示指定地址的安全标识符)
!sid 显示指定地址的安全标识符 (SID)。
!sid Address [Flags]
51.1 DLL
Exts.dll
52. !slist (显示单链表)
!slist 扩展显示单链表 (SList)。
!slist Address [ Symbol [Offset] ]
!slist -?
52.1 DLL
Exts.dll
53. !sym (控制提示噪声)
!sym 控制符号加载和符号提示的噪声。
!sym
!sym noisy
!sym quiet
!sym prompts
!sym prompts off
53.1 DLL
Dbghelp.dll
54. !teb (显示TEB中信息的格式化视图)
!teb 显示线程环境块 (TEB) 中信息的格式化视图。
!teb [TEB-Address]
54.1 DLL
Exts.dll
55. !tls (显示TLS图)
!tls 显示线程本地存储 (TLS) 插槽。
!tls Slot [TEB]
55.1 DLL
Exts.dll
56. !token (显示安全令牌对象的格式化视图)
!token 显示安全令牌对象的格式化视图。
(1) 内核模式
!token [-n] [Address]
!token -?
(2) 用户模式
!token [-n] [Handle]
!token -?
56.1 DLL
Exts.dll
57. !tp (显示线程池详情)
!tp显示线程池信息。
!tp pool Address [Flags]
!tp tqueue Address [Flags]
!tp ItemType Address [Flags]
!tp ThreadType [Address]
!tp stats Address [Flags]
!tp wfac Address
!tp wqueue Address Priority Node
!tp -?
57.1 DLL
Exts.dll
58. !version (显示扩展DLL的版本信息)
!version 显示扩展 DLL 的版本信息。请勿将此扩展命令与 version(显示调试器版本)命令混淆。
![ExtensionDLL.]version
58.1 DLL
在大多数护展 DLL 中均可获得。
58. !winrterr(设置运行时错误调试器报告模式)
!winrterr 设置 Windows 运行时错误的调试器报告模式。
!winrterr Mode
!winrterr

973

被折叠的 条评论
为什么被折叠?



