WinDbg命令

 

基本命令

  1. .help
    显示所有可用的命令及其简要说明。

  2. .cls
    清屏。

  3. q 或 .quit
    退出 Windbg。

  4. g
    继续执行被调试的程序。

  5. p
    单步执行一条指令(Step Over)。

  6. t
    单步执行一条指令,并进入函数调用(Step Into)。

  7. bp
    设置断点。例如:bp MyFunction 在 MyFunction 处设置断点。

  8. bl
    列出所有断点。

  9. bc
    清除断点。例如:bc 1 清除编号为 1 的断点。

  10. be
    启用断点。例如:be 1 启用编号为 1 的断点。

  11. bd
    禁用断点。例如:bd 1 禁用编号为 1 的断点。

内存操作命令

  1. dd
    以 DWORD 格式显示内存内容。例如:dd 0x0012FF80 显示从地址 0x0012FF80 开始的内存内容。

  2. db
    以字节格式显示内存内容。

  3. dw
    以 WORD 格式显示内存内容。

  4. dc
    以 DWORD 格式显示内存内容,并尝试解析为 ASCII 字符串。

  5. ed
    编辑内存内容。例如:ed 0x0012FF80 12345678 将地址 0x0012FF80 处的内存内容修改为 12345678

  6. !address
    显示指定地址的内存信息。

寄存器操作命令

  1. r
    显示或修改寄存器内容。例如:r eax=0 将 eax 寄存器的值设置为 0。

  2. .registers
    显示所有寄存器的值。

堆栈操作命令

  1. k
    显示当前线程的调用堆栈。

  2. kb
    显示当前线程的调用堆栈,并显示前三个参数。

  3. kp
    显示当前线程的调用堆栈,并显示所有参数。

  4. !teb
    显示当前线程的 TEB(Thread Environment Block)信息。

  5. !peb
    显示当前进程的 PEB(Process Environment Block)信息。

符号和模块命令

  1. .reload
    重新加载符号文件。

  2. lm
    列出所有已加载的模块。

  3. x
    显示符号信息。例如:x MyModule!* 显示 MyModule 模块中的所有符号。

  4. !sym noisy
    启用符号加载的详细输出。

异常和事件命令

  1. .exr
    显示异常记录。

  2. .cxr
    显示上下文记录。

  3. .ecxr
    显示异常上下文记录。

  4. !analyze -v
    自动分析当前异常,并显示详细信息。

进程和线程命令

  1. |
    列出所有进程。

  2. ~
    列出所有线程。

  3. ~ns
    切换到指定线程。例如:~2s 切换到线程 2。

  4. !process
    显示指定进程的详细信息。

  5. !thread
    显示指定线程的详细信息。

其他常用命令

  1. !heap
    显示堆信息。

  2. !handle
    显示句柄信息。

  3. !object
    显示对象信息。

  4. !runaway
    显示线程的 CPU 使用时间。

  5. .logopen
    打开日志文件,记录调试会话。例如:.logopen c:\debug.log

  6. .logclose
    关闭日志文件。

  7. .shell
    执行 shell 命令。例如:.shell dir 执行 dir 命令。

扩展命令

  1. !ext.help
    显示所有扩展命令的帮助信息。

  2. !extname.command
    执行指定的扩展命令。例如:!analyze -v 是 !analyze 扩展命令的一个用法。

调试脚本

  1. $$
    注释符号,用于脚本中。

  2. .if
    条件判断。例如:.if (eax == 0) { .echo "EAX is zero" }

  3. .foreach
    循环命令。例如:.foreach (value {dd 0x0012FF80 L4}) { .echo value }

示例

  1. 设置断点并运行

    bp MyFunction
    g
  2. 查看内存内容

    dd 0x0012FF80
  3. 查看调用堆栈

    k
  4. 自动分析异常

    !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
  • 意义:进程的可执行文件名。
  • 说明:表示运行的用户模式程序名。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值