!analyze -v
FAULTING_IP
- 显示发生故障时的指令指针
EXCEPTION_RECORD
- 显示此崩溃的异常记录
- 也可以通过
.exr
查看
BUGCHECK_STR
- 该名称是错误的名称,错误检查一词实际上表示内核模式崩溃
- 在用户模式调试中,将显示异常代码
DEFAULT_BUCKET_ID
- 显示了该故障属于的失败的一般类别
LAST_CONTROL_TRANSFER
- 显示堆栈上的最后一个调用
- 在这种情况下,地址为
0x01050963
的代码调用了0x77F97704
的函数 - 可以将这些地址与
LN
(列表最近的符号)命令一起使用这些地址来确定这些地址位于哪些模块和功能中
STACK_TEXT
- 显示故障组件的堆栈跟踪
FOLLOWUP_IP
- 当这个分析命令确定可能导致错误的指令时,它将其显示在本字段中
STACK_COMMAND
- 显示用于获得
stack_text
的命令
ln
概述
/D
- 指定输出使用
DEBUGGER
标记语言(DML
)显示DML
输出包含一个链接,您可以使用该链接来探索包含最近符号的模块- 它还包括一个链接,您可以使用该链接来设置断点
lm
概述
LM
命令显示指定的已加载模块。输出包括模块的状态和路径
D
- 使用调试器标记语言显示输出
o
- 仅显示加载模块
l
- 仅显示其符号信息已加载的模块\
v
- 该显示包括符号文件名,图像文件名,校验和信息,版本信息,日期邮票,时间戳记以及有关模块是否为管理代码(
CLR
)的信息
u
- (仅内核模式)仅显示用户模式符号信息
k
- (仅内核模式)仅显示内核模式符号信息
e
- 仅显示具有符号问题的模块
- 这些符号包括没有符号和模块的模块,其符号状态为
c
,t
,#
,m
或导出。有关这些符号的更多信息,请参见符号状态缩写。
c
- 显示校验和数据
1m
- 减少输出,因此除了模块的名称外,什么都没有
- 如果您使用
.foreach
令牌将命令输出输送到另一个命令的输入中,则此选项将很有用。
sm
- 按模块名称而不是按开始地址对显示器进行分类
- 此外,您只能包含以下选项之一。如果您不包含以下任何选项,则显示包含符号文件名
i
显示图像文件名f
显示完整的图像路径。 (除非您发布了.reload -s
命令,否则此路径始终匹配在初始加载通知中显示的路径。)当您使用f
时,不显示f
,符号类型信息将不会显示。n
显示图像名称。当您使用n
时,不会显示符号类型信息。p
显示映射的图像名称。当您使用p
时,不会显示符号类型信息。t
显示文件时间戳记。当您使用t
时,不会显示符号类型信息。
~
概述
- 显示当前进程中指定线程或所有线程的状态
~e
- 为特定线程或目标进程中的所有线程执行一个或多个命令
1 |
0:000> ~2e r; k; kd |
~f
- 冻结了给定的线程,导致其停止并等待直到未冻结
- 冻结后,该线程将不再被调度执行,调试器会阻止其获得
CPU
时间片- 常用于排查线程间的竞争问题或隔离异常线程
- 冻结是调试器内部行为,不影响线程的挂起计数
~u
- 解冻给定线程
1 |
0:000> ~123 u |
~n
- 挂起指定线程
- 挂起线程通过增加挂起计数(
Suspend Count
),当计数≥1
时线程暂停执行
~m
- 恢复指定线程
~s
- 切换线程
a
概述
- 汇编
32
位x86
指令助记符并将结果指令代码放入内存
参数
- 地址
- 指定内存中存放结果代码的块的起始位置
ad
概述
- 从别名列表中删除一个别名
/q
- 静默模式, 如果别名不存在,隐藏错误消息
ah
概述
- 控制特定地址的断言处理状态
ahb
- 如果断言在指定的地址失败,则闯入调试器
ahi
- 忽略指定地址的断言失败
ahd
- 删除指定地址的任何断言处理信息。此删除使调试器返回其该地址的默认状态
ahc
- 删除当前进程的所有断言处理信息
ah
- 显示当前断言处理设置
al
概述
- AL命令显示当前定义的用户命名别名的所有列表
1 2 3 4 5 6 |
0:000> al Alias Value ------- ------- $alt_ntdllsym ntdll $avrfnsym verifier $avrfsym verifier |
ba
概述
as
和aS
命令定义新的别名或重新定义现有的别名
ad
概述
- 删除别名
/q
- 静默模式
ba
概述
- 设置硬件断点,监视内存访问(读/写/执行)
CPU
最多支持4
个硬件断点
参数
Access
:e
(执行)、r
(读/写)、w
(写)Size
:监控的字节数(1/2/4/8
,需地址对齐)
1 |
ba w4 0x7ffd0000 # 监控该地址的4字节写入操作 |
bc
概述
- 清除指定断点或全部断点
1 2 |
bc <ID> # 清除单个断点(如 bc 1) bc * # 清除所有断点 |
bd
概述
- 临时禁用断点(保留配置但不触发)
1 2 |
bd <ID> # 禁用单个断点(如 bd 2) bd * # 禁用所有断点 |
be
概述
- 重新启用被禁用的断点
1 2 |
be <ID> # 启用单个断点(如 be 3) be * # 启用所有断点 |
bl
概述
- 列出所有已设置的断点及其状态(启用/禁用/延迟)
1 2 3 |
0:000> bl 0 e 00401000 MyApp!main 1 d 7c801b00 ntdll!KiFastSystemCall |
bp
概述
- 在指定地址或符号处设置软件断点(通过插入
INT 3
指令实现) - 适用于已加载模块的固定地址(如
bp 0x401000
或bp MyApp!main
)- 模块重加载后地址可能失效,需重新设置
1 |
bp kernel32!CreateFileW # 在CreateFileW函数入口设断 |
bu
概述
- 设置延迟断点,在符号解析后自动绑定地址
- 块未加载时预先设置断点(如驱动调试)
- 代码热更新后自动更新断点地址
1 |
bu MyDll!Initialize # 模块加载后自动生效 |
bm
概述
- 通过通配符批量设置符号匹配的断点
1 2 |
bm MyApp!MyClass::* # 为MyClass所有成员函数设断 bm *CreateWindow* # 匹配所有含"CreateWindow"的函数 |
br
概述
- 设置条件递归断点,仅在特定条件下触发(需结合脚本或扩展)
1 |
bp MyApp!ProcessData ".if (poi(esp+8) == 0x1234) { gc } .else { }" |
bsc
概述
- 在源代码行号处设置断点(需符号和源文件路径支持)
1 |
bsc `MyApp@main.cpp:20` # 在main.cpp第20行设断 |
c
概述
- 用于比较两个内存区域的内容
1 2 3 |
c <起始地址1> <结束地址1> <起始地址2> # 或 c <起始地址1> L<长度> <起始地址2> |
d
概述
- 默认按最近使用的格式(如上次使用的
db
、dd
等)显示内存内容 - 若未指定格式,默认以十六进制字节和
ASCII
字符混合显示
1 |
d 0x0012ff40 L20 # 显示地址 0x0012ff40 开始的 32 字节内存 |
da
概述
- 以 ASCII 字符串格式显示内存内容,自动识别字符串结尾的
\0
db
概述
- 以 字节(1字节) 为单位显示内存,并附带右侧的 ASCII 字符转换(非可打印字符显示为
.
)
dc
概述
- 以 双字(4字节) 为单位显示内存,并在右侧尝试解析为 ASCII 字符串(类似
dd
和da
的结合)
dd
概述
- 以 双字(4字节) 为单位显示内存,仅显示十六进制值,无字符转换
dD
概述
- 以 双精度浮点数(8字节)格式显示内存
df
概述
- 以 单精度浮点数(4字节)格式显示内存
dp
概述
- 以 指针大小(32位系统为4字节,64位系统为8字节)显示内存,并尝试解析为符号地址(如函数名)
dq
概述
- 以 四字(8字节) 为单位显示内存的十六进制值
du
概述
- 以 Unicode 字符串(宽字符,每字符2字节)格式显示内存
dw
概述
- 以 字(2字节) 为单位显示内存的十六进制值
dW
概述
- 类似
du
,但显示格式可能包含更多调试信息
本文为原创文章,版权归Aet所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ WindowsETW进程监控相关03/17
- ♥ Windbg:命令实践详解二03/28
- ♥ COM组件_303/07
- ♥ Windows 核心编程 _ 内核对象一06/04
- ♥ Soui六06/01
- ♥ Cef:沙盒、CefApp、CefClient02/29