介绍几个Windbg入门命令

admin 2026-02-02 00:41:19 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文介绍了WinDbg的核心入门命令,涵盖基础控制、代码堆栈查看、内存变量检查、符号模块处理、断点设置及进程线程操作等类别。通过列举g、k、bp、!analyze等命令及演示,文章展示了如何应对大多数调试场景与崩溃分析。掌握这些指令是进行用户态及内核态逆向开发的必要前提,能有效辅助定位问题并分析程序异常。 综合评分: 85 文章分类: 逆向分析,安全工具,二进制安全


cover_image

介绍几个 Windbg 入门命令

原创

MyStackTrace MyStackTrace

MyStackTrace

2026年1月25日 00:03 北京

无论在 Windows 平台上做开发还是做逆向,无论是调试用户态的应用程序还是调试内核态的驱动,我们都离不开 Windbg 这个神器。本文就来介绍一下 Windbg 的几个入门命令,知道了这些命令就基本上能够应付大多数调试场景。

WinDbg 入门命令可以分为几类:基础控制、查看代码/堆栈、查看内存/变量、符号与模块、断点设置、进程/线程操作。以下是初学者最常用的命令列表,方便快速上手。

一、基础控制命令

| | | | — | — | | 命令 | 说明 | | g | 继续运行程序(Go) | | p | 单步执行(Step Over,不进入函数) | | t | 单步进入(Step Into,进入函数) | | gu | 执行到函数返回(Step Out) | | q | 退出 WinDbg | | .cls | 清屏,当你 debug 不出来的时候,把所有的烦恼一扫光😁 |

下面是这几个命令的演示。

二、查看代码与堆栈

| | | | — | — | | 命令 | 说明 | | k | 显示当前线程的调用堆栈(Call Stack) | | kb | 显示堆栈 + 前三个参数(x86 常用) | | kp | 显示堆栈 + 完整参数(类型+值) | | u | 反汇编当前指令附近的代码 | | u 地址 | 反汇编指定地址的代码 | | uf 函数名 | 反汇编整个函数 |

下面是这些命令的演示。u 系列命令(u, uf, ub)在我们通过反汇编逆向的过程中用的是非常频繁的。

三、查看内存与变量

| | | | — | — | | 命令 | 说明 | | db 地址 | 以字节(Byte)格式显示内存 | | dw 地址 | 以字(Word,2字节)格式显示内存 | | dd 地址 | 以双字(DWord,4字节)格式显示内存 | | dq 地址 | 以四字(QWord,8字节)格式显示内存 | | da 地址 | 显示 ASCII 字符串 | | du 地址 | 显示 Unicode 字符串 | | dt 类型名 地址 | 按结构体/类型显示内存(如 dt nt!_EPROCESS 0x…) | | dv | 显示局部变量(需符号支持) | | r | 显示寄存器值(如 r eax、r rip) |

下面以对一个程序的 main 函数为例来演示上面这些命令的用法。我在程序 APCTest.exe 的 main 函数入口处设置了一个断点,当程序执行到该断点的时候,我们先使用 dv 把 main 函数的参数和一些局部变量的值给显示出来,然后再用 dq 命令查看第二个参数 argv 数组中的内容,我们都知道 main 函数的第二个参数 argv 中存放的是该程序的命令行参数,这个数组的第 0 项存放的是该可执行程序的路径,使用 da 命令可以把这个字符串给显示出来。最后我们使用 r 命令把寄存器 rcx 和 rdx 的值显示出来,根据微软的 MSVC 编译器的 x64 调用约定,rcx 放的是函数的第一个参数,rdx 放的是函数的第二个参数,所以通过 r 命令看到的这两个寄存器的内容和前面通过 dv 命令看到的这两个参数的值是一样的。

四、符号与模块

| | | | — | — | | 命令 | 说明 | | .reload | 重新加载符号,通常用于在修改了符号路径之后重新加载符号 | | lm | 列出已加载的模块(DLL/EXE) | | lm v | 显示模块详细信息 | | x 模块名!符号 | 查找符号地址(如 x kernel32!CreateFile*) | | .sympath | 显示符号路径 | | .sympath+ 路径 | 添加符号路径 |

下面是这些命令的演示。

x 命令除了用来确认一个符号是否存在,在不加参数的情况下会把当前哈数的参数和局部变量也给列出来。

五、断点设置

| | | | — | — | | 命令 | 说明 | | bp 地址/函数名 | 设置软件断点(如 bp kernel32!CreateFileW) | | bl | 列出所有断点 | | bc 编号 | 清除断点(如 bc 0) | | bd 编号 | 禁用断点 | | be 编号 | 启用断点 | | ba 访问类型 地址 | 设置硬件断点(如 ba w4 0x401000写4字节时中断) |

下面是设置断点的相关演示。

ba  (Break on Access) 命令是一个很有用的命令,该命令可以设置内存断点,你可以用这个命令来监控某些变量或者内存会被哪些代码访问或者修改。下面是一个使用 ba 命令来监控变量 dwThreadId 会在哪儿被访问的演示。

六、进程与线程

| | | | — | — | | 命令 | 说明 | | ~ | 列出所有线程 | | ~线程号 s | 切换到指定线程(如 ~2s) | | !peb | 显示当前进程的 PEB(进程环境块) | | !teb | 显示当前线程的 TEB(线程环境块) |

下面是列出线程,切换线程的演示,切换到线程 2 之后,再次列出线程,发现线程 2 前面多了一个点,说明当前调试上下文已经切到了线程 2 上。

下面是使用 !peb 命令显示进程控制块的演示,这个命令可以列出进程的详细信息。

七、异常与崩溃分析

| | | | — | — | | 命令 | 说明 | | .exr -1 | 显示最近一次异常记录 | | .ecxr | 切换到异常上下文(用于分析崩溃点) | | !analyze -v | 自动分析崩溃原因(需符号支持) |

下面是当程序异常崩溃时,使用 .exr 命令查看异常信息的演示,根据这些信息我们基本上能知道程序崩溃的原因,这里就是一个访问空指针引起的崩溃。

命令 !analyze -v 是一个比较强大的命令,它能够帮你详细分析崩溃的原因,通过这个命令,我们能够很轻松的定位到大部分崩溃的原因。

要想入门 Windbg 调试,上面这些命令是必须掌握的。这些命令覆盖了 WinDbg 入门所需的核心功能,熟练后可以逐步学习更高级的脚本和扩展命令。

Have Fun!


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:MyStackTrace MyStackTrace MyStackTrace《介绍几个 Windbg 入门命令》

介绍几个Windbg入门命令 网络安全文章

介绍几个Windbg入门命令

文章总结: 本文介绍了WinDbg的核心入门命令,涵盖基础控制、代码堆栈查看、内存变量检查、符号模块处理、断点设置及进程线程操作等类别。通过列举g、k、bp、!
WindowsVEH介绍 网络安全文章

WindowsVEH介绍

文章总结: 文档介绍Windows向量化异常处理(VEH)机制,其具有进程全局性和介入时机早的特点,优先于传统SEH执行。文章详细讲解了注册与移除VEH的API
评论:0   参与:  0