WinDbg学习手记
用户模式下调试
常用命令
1.导入符号文件相关
命令>>>
导入符号文件:.sympath pdb符号文件路径
程序重新加载:.reload
查看模块中的符号信息:x 模块名+'!'+'*'
查看模块中某些包含"xxx"的方法:x 模块名+'!'+"xxx"+'*' PS: '*'是通配符
设置断点:bu 模块名+'!'+方法名
验证是否已下断点:bl 模块名+'!'+方法
2.运行
命令>>>
运行:g
3.查看进程中加载的代码模块列表
命令>>>
查看进程中加载的代码模块列表:lm
4.查看堆栈跟踪信息
命令>>>
查看堆栈跟踪:k
5.查看所有线程的列表
命令>>> 查看所有线程的列表:~
查看线程n号的堆栈跟踪(从0开始):'~'+n号+'s'
6.读写内存
命令>>> 显示给定范围内的内存:d {a|b|c|d|D|f|p|q|u|w|W} [Options] [Range] 读取给定范围内的内存:e{b|d|D|f|p|q|w} Address [Values]
比较两个内存区域中的值:c Range Address
8.获取寄存器信息
获取寄存器信息:r
9.反汇编函数
命令>>> 反汇编特定函数(全部代码):uf nt!ZwIsProcessInJob
10.步过
命令>>> 步进:p 步进到地址:pa [r] [= StartAddress] StopAddress ["Command"] 步进到下一个call指令处:pc [r] [= StartAddress] [Count] 步进到下一个 Return:pt 步进到下一个 Call 或 Return:pct [r] [= StartAddress] [Count] StartAddress:指定调试器开始执行的地址。 否则,调试器从指令指针指向的指令开始。 StopAddress:指定执行将停止的地址。 Command:指定执行步骤后要执行的调试器命令。 此命令在显示标准 pa 结果之前执行。 r:打开和关闭寄存器和标志的显示。 默认情况下,将显示寄存器和标志。 Count:指定调试器为停止此命令而必须遇到的call指令数。
11.步入
命令>>>
步进:t
步进到地址:pt [r] [= StartAddress] StopAddress ["Command"]
步进到下一个call指令处:tc [r] [= StartAddress] [Count]
步进到下一个 Return:tt
步进到下一个 Call 或 Return:tct [r] [= StartAddress] [Count]
StartAddress:指定调试器开始执行的地址。 否则,调试器从指令指针指向的指令开始。
StopAddress:指定执行将停止的地址。
Command:指定执行步骤后要执行的调试器命令。 此命令在显示标准 pa 结果之前执行。
r:打开和关闭寄存器和标志的显示。 默认情况下,将显示寄存器和标志。
Count:指定调试器为停止此命令而必须遇到的call指令数。
12.退出调试并从进程分离
命令>>>
退出调试并从进程分离:qd
内核模式下调试
设置虚拟机
打开调试:bcdedit/debug on
配置调试:bcdedit/dbgsettings +调试方式+调试对象
/dbgsettings选项设置或显示计算机的当前全局调试程序设置。
调试方式有:NET、LOCAL、SERIAL、USB、1394
远程网络主机、本地、COM 端口、USB连接、1394频道
bcdedit /dbgsettings NET HOSTIP:ip PORT:port [KEY:key] [nodhcp] [newkey] [/start startpolicy] [/noumex] bcdedit /dbgsettings LOCAL [/start startpolicy] [/noumex] bcdedit /dbgsettings SERIAL [DEBUGPORT:port] [BAUDRATE:baud] [/start startpolicy] [/noumex] bcdedit /dbgsettings USB [TARGETNAME:targetname] [/start startpolicy] [/noumex] bcdedit /dbgsettings 1394 [CHANNEL:channel] [/start startpolicy] [/noumex] NOTE: The 1394 TRANSPORT IS DEPRECATED
NET:newkey(为连接生成一个新的加密密钥)和KEY:key(指定用于加密连接的密钥)只用设置一个就可;
例子:bcdedit /dbgsettings NET HOSTIPV6:2001:48:d8:2f:5e:c0:42:28:4f5b PORT:50000
serial 串口:
bcdedit /dbgsettings serial baudrate:115200 debugport:n
常用命令
1.查找驱动对象
!drvobj 驱动名称 ,或
!object \Driver 驱动名称
2.查看驱动对象的数据结构及内容
dt nt!_DRIVER_OBJECT 0xXXX
3.查看拥有某个设备句柄的所有用户态应用程序列表
!devhandles 设备对象的地址
更多参考:https://docs.microsoft.com/zh-cn/windows-hardware/drivers/debugger/commands