基本命令
-
.help
显示所有可用的命令及其简要说明。 -
.cls
清屏。 -
q 或 .quit
退出 Windbg。 -
g
继续执行被调试的程序。 -
p
单步执行一条指令(Step Over)。 -
t
单步执行一条指令,并进入函数调用(Step Into)。 -
bp
设置断点。例如:bp MyFunction在MyFunction处设置断点。 -
bl
列出所有断点。 -
bc
清除断点。例如:bc 1清除编号为 1 的断点。 -
be
启用断点。例如:be 1启用编号为 1 的断点。 -
bd
禁用断点。例如:bd 1禁用编号为 1 的断点。
内存操作命令
-
dd
以 DWORD 格式显示内存内容。例如:dd 0x0012FF80显示从地址0x0012FF80开始的内存内容。 -
db
以字节格式显示内存内容。 -
dw
以 WORD 格式显示内存内容。 -
dc
以 DWORD 格式显示内存内容,并尝试解析为 ASCII 字符串。 -
ed
编辑内存内容。例如:ed 0x0012FF80 12345678将地址0x0012FF80处的内存内容修改为12345678。 -
!address
显示指定地址的内存信息。
寄存器操作命令
-
r
显示或修改寄存器内容。例如:r eax=0将eax寄存器的值设置为 0。 -
.registers
显示所有寄存器的值。
堆栈操作命令
-
k
显示当前线程的调用堆栈。 -
kb
显示当前线程的调用堆栈,并显示前三个参数。 -
kp
显示当前线程的调用堆栈,并显示所有参数。 -
!teb
显示当前线程的 TEB(Thread Environment Block)信息。 -
!peb
显示当前进程的 PEB(Process Environment Block)信息。
符号和模块命令
-
.reload
重新加载符号文件。 -
lm
列出所有已加载的模块。 -
x
显示符号信息。例如:x MyModule!*显示MyModule模块中的所有符号。 -
!sym noisy
启用符号加载的详细输出。
异常和事件命令
-
.exr
显示异常记录。 -
.cxr
显示上下文记录。 -
.ecxr
显示异常上下文记录。 -
!analyze -v
自动分析当前异常,并显示详细信息。
进程和线程命令
-
|
列出所有进程。 -
~
列出所有线程。 -
~ns
切换到指定线程。例如:~2s切换到线程 2。 -
!process
显示指定进程的详细信息。 -
!thread
显示指定线程的详细信息。
其他常用命令
-
!heap
显示堆信息。 -
!handle
显示句柄信息。 -
!object
显示对象信息。 -
!runaway
显示线程的 CPU 使用时间。 -
.logopen
打开日志文件,记录调试会话。例如:.logopen c:\debug.log。 -
.logclose
关闭日志文件。 -
.shell
执行 shell 命令。例如:.shell dir执行dir命令。
扩展命令
-
!ext.help
显示所有扩展命令的帮助信息。 -
!extname.command
执行指定的扩展命令。例如:!analyze -v是!analyze扩展命令的一个用法。
调试脚本
-
$$
注释符号,用于脚本中。 -
.if
条件判断。例如:.if (eax == 0) { .echo "EAX is zero" }。 -
.foreach
循环命令。例如:.foreach (value {dd 0x0012FF80 L4}) { .echo value }。
示例
-
设置断点并运行
bp MyFunction g
-
查看内存内容
dd 0x0012FF80
-
查看调用堆栈
k
-
自动分析异常
!analyze -v
这些命令只是 Windbg 中的一部分,Windbg 的功能非常强大,适用于各种复杂的调试场景。熟练掌握这些命令可以大大提高调试效率。
PROCESS 81a979d0 SessionId: 0 Cid: 0210 Peb: 7ffda000 ParentCid: 063c
DirBase: 145b9000 ObjectTable: e12fed70 HandleCount: 53.
Image: Dbgview.exe
1. PROCESS 81a979d0
- 意义:
PROCESS是该进程对象的内核地址。 - 用途:可以使用这个地址获取更多信息,例如通过
dt _EPROCESS <地址>查看_EPROCESS结构。
2. SessionId: 0
- 意义:进程所属的会话 ID。
- 说明:
- 会话 是一种隔离机制,每个会话代表一个登录用户的环境。
- Session 0 通常用于系统服务和核心进程。
3. Cid: 0210
- 意义:Client ID,表示进程 ID(PID)。
- 说明:可以通过
!handle或任务管理器等工具找到对应的进程。
4. Peb: 7ffda000
- 意义:进程环境块(Process Environment Block,PEB)的用户模式地址。
- 说明:PEB 存储了与进程相关的全局信息(例如模块列表、环境变量等)。
- 查看:可以通过以下命令进一步查看 PEB 信息:
dt _PEB 7ffda000
5. ParentCid: 063c
- 意义:父进程的 Cid,即父进程的 PID。
- 说明:可以根据此值追溯该进程的父进程。
6. DirBase: 145b9000
- 意义:页目录基址(CR3 的值)。
- 说明:
- 在内核模式下,操作系统通过 DirBase 查找页表。
- 可用于调试进程的虚拟地址到物理地址的映射。
7. ObjectTable: e12fed70
- 意义:进程的对象表地址。
- 说明:
- 对象表存储了该进程打开的所有内核对象句柄。
- 可以通过
!handle命令查看句柄列表:!handle 0 0 <PROCESS 地址>
8. HandleCount: 53
- 意义:当前进程打开的句柄数量。
- 说明:反映了进程当前使用的内核资源数量。
9. Image: Dbgview.exe
- 意义:进程的可执行文件名。
- 说明:表示运行的用户模式程序名。
1万+

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



