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

posted @ 2021-12-26 23:19  An2i  阅读(93)  评论(0)    收藏  举报