在Windbg的命令行窗口输入"?", 则会输出帮助菜单, 在这个Menu中会显示一些常用的命令:
(1)断点指令
(1)断点指令
B[C|D|E] [<bps>]
clear|disable|enable breakpoints
BL
list breakpoints
BP <address>
set soft breakpoints
BA <access> <size> <addr>
break on access
(2)数据查看指令
D[type][<range>]
dump memory
DT [-n|y] [[mod!]name] [[-n|y]fields][address] [-l list] [-a[]|c|i|o|r[#]|v]
dump using type information
DV [<name>]
dump local variables
(3)数据修改指令
E[type] <address> [<values>]
enter memory values
(4)运行
G[H|N] [=<address> [<address>...]]
go
P [=<addr>] [<value>]
step over
(5)堆栈操作
K[b|p|P|v]
(6)显示加载的模块列表
LM
list modules
(7)寄存器操作
R [[<reg> [= <expr>]]]
view or set registers
(8)Search指令
S[<opts>] <range> <values>
search memory
(9)跟踪指令T,TA,TB,TC,WT,P,PA,PC
(10)退出
Q
(11)反汇编
U[<range>]
其中最常用的就是反汇编操作和显示模块操作. LM命令显示当前加载的模块. 当你连接过程中, Windbg提示相应的module找不到时, 就可以运用这个命令进行查看. LM的一个扩展命令是"lm t n", 这个命令显示当前所有加载的驱动信息(过去的命令是!driver),在调试内核驱动的过程中非常有用,可以找到相应驱动的起始地址。反汇编命令u, 可以在相应的地址中逐步的解析代码,这在内核调试中是最常用的一种查看代码的方式。
除上面的一些基本命令之外,还有一些非常有用的指令:
(1)K[KB|KP]
显示当前的堆栈,当然也可以用alt+6直接调出窗口显示
(2)!process
显示当前的进程EXPROCESS状态,!process 0 0 显示所有的进程状态
(3)!thread
显示当前的线程状态,dt nt!_ethread显示ETHREAD结构
(4)!drvobj [path]
列出当前的驱动程序在驱动对象中的例程,其中path是驱动的设备路径,例如: !drvobj \filesystem\fat 2 列出FAT文件系统驱动的例程
(5)dt nt!_*
查看内核的数据结构
(6)!stack 0
显示线程当前地址
(7)!ioapic
查看I/O的中断控制器
(8)!irql
查看CPU的IRQL,这在CPU中断调试中非常有用
(9)!exqueue
可以看系统辅助的线程列表
(10)!reg viewlist
注册表的存储显示,!reg hivelist显示注册表一个存储的内存使用量
(11)!vm
显示系统的内存池信息
(12)dt _TOKEN
显示内部访问令牌
(13)!object \device
显示设备对象信息,用winobj工具也可以看到
(11)反汇编
U[<range>]
其中最常用的就是反汇编操作和显示模块操作. LM命令显示当前加载的模块. 当你连接过程中, Windbg提示相应的module找不到时, 就可以运用这个命令进行查看. LM的一个扩展命令是"lm t n", 这个命令显示当前所有加载的驱动信息(过去的命令是!driver),在调试内核驱动的过程中非常有用,可以找到相应驱动的起始地址。反汇编命令u, 可以在相应的地址中逐步的解析代码,这在内核调试中是最常用的一种查看代码的方式。
除上面的一些基本命令之外,还有一些非常有用的指令:
(1)K[KB|KP]
显示当前的堆栈,当然也可以用alt+6直接调出窗口显示
(2)!process
显示当前的进程EXPROCESS状态,!process 0 0 显示所有的进程状态
(3)!thread
显示当前的线程状态,dt nt!_ethread显示ETHREAD结构
(4)!drvobj [path]
列出当前的驱动程序在驱动对象中的例程,其中path是驱动的设备路径,例如: !drvobj \filesystem\fat 2 列出FAT文件系统驱动的例程
(5)dt nt!_*
查看内核的数据结构
(6)!stack 0
显示线程当前地址
(7)!ioapic
查看I/O的中断控制器
(8)!irql
查看CPU的IRQL,这在CPU中断调试中非常有用
(9)!exqueue
可以看系统辅助的线程列表
(10)!reg viewlist
注册表的存储显示,!reg hivelist显示注册表一个存储的内存使用量
(11)!vm
显示系统的内存池信息
(12)dt _TOKEN
显示内部访问令牌
(13)!object \device
显示设备对象信息,用winobj工具也可以看到