在WinDBG中设置断点的命令

本文介绍Windbg中各种断点的设置方法及其应用场景,包括普通断点、内存访问断点及条件断点等,并提供了多个实际示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转自:http://www.cnblogs.com/awpatp/archive/2011/01/02/1924085.html

命令

==========

~0 bp 02sample!KBTest::Fibonacci_stdcall "r esp"

在零号线程上的KBTest类的Fibonacci_stdcall函数上设置断点, 并且在触发断点时执行"r esp"命令.

bl

列出所有已经设置了的断点

bc *

清除所有断点

bp 02sample!KBTest::Fibonacci_stdcall “r esp;g”

在所有线程上设置断点, 并且在触发断点时执行"resp;g"两条命令.

bm 02sample!*kbtest*

命令bm可以在参数中指定一个符号模式, 这样在所有与这个符号匹配的地址上都将设置一个断点. 上面的命令使用bm在KBTest的所有方法上设置断点.

bu ole32!CoInitializeEx

Windows操作系统会在必要时加载动态链接库, 而我们经常需要在一个还没有被加载的模块上设置断点. 命令bu可以用来设置一个延迟断点, 只有当这个断点所在的模块被加载时, 延迟断点才能成为一个真正的断点. 上面的命令将在DCOM的初始化函数中设置一个延迟断点.

内存访问断点

============

内存访问断点的名令为ba, 即Break on Access.

用户态的命令语法:

[~Threadba[IDAccess Size [Options] [Address [Passes]] ["CommandString"]

举例:

ba w4 gGlobal+0

上面命令设置了一个断点, 使处理器监视从gGlobal起始地址开始的4个字的内的写入操作, 一旦发现有试图修改这个地址的操作, 立即进入断点.

条件断点

=============

在每个断点上都可以设置一个命令, 每当调试目标处罚这个断点时, 调试器都会执行这个命令. 通过这个功能我们可以创建非常有用的条件断点.

我们经常会遇到某个函数只有在某种条件下才会发生故障, 因此我们希望程序在函数某条件下发生故障时才停下来, 以进行进一步的分析. 这可以通过有条件地执行g命令来实现. 如果函数执行后没有检测到错误条件的话, 就继续执行. 否则就停下来.

bp 02sample!KBTest::Fibonacci_stdcall “gu; .if(eax!=1) {g}”

上面的命令中, 我们配置了一个断点, 断在KBTest类的Fibonacci_stdcall函数开始的时候, 然后立即执行命令gu(即Go Up, 目标会开始执行直到当前函数结束), 函数执行结束后检测函数的返回值(eax), 如果不是1, 则继续执行(g), 否则, 进入断点.

参考资料

===========

<<AWD>>

### 设置 WinDbg 断点 为了在 WinDbg 中为 `CreateFile` 函数设置断点,需要了解该函数位于哪个 DLL 文件中。通常情况下,`CreateFileW` 和 `CreateFileA` 是 Windows API 的一部分,存在于 kernel32.dll 或者其他核心库中。 可以在 WinDbg 命令窗口输入以下命令来查找确切位置: ```plaintext x kernel32!CreateFile* ``` 这会列出所有匹配的符号名称及其内存地址。对于 Unicode 版本(推荐),通常是 `kernel32!CreateFileW`;而对于 ANSI 版本,则是 `kernel32!CreateFileA`[^1]。 一旦确认了具体的函数名,就可以通过下面的方法之一为其设置断点: #### 方法一:使用 bp 命令直接设断点 假设要中断于 `CreateFileW` 调用处,在命令行键入如下指令即可实现目的: ```plaintext bp kernel32!CreateFileW ``` 此操作会在每次应用程序尝试执行这个特定版本的 `CreateFile` 时暂停调试器。 #### 方法二:利用 sxe 来捕获异常并自动附到目标进程中 如果希望更灵活地控制何时触发断点,比如仅当某个条件满足时才停止运行,那么可以考虑采用软件事件扩展 (sxe) 功能配合条件表达式一起工作。不过这种方法相对复杂一些,适用于高级场景下的需求分析。 #### 示例代码片段展示如何设置简单的断点 ```plaintext 0:000> .sympath SRV*c:\symbols*http://msdl.microsoft.com/download/symbols // 配置符号服务器路径 0:000> .reload // 载最新符号信息 0:000> x kernel32!CreateFile* // 查找 CreateFile 相关符号 0:000> bp kernel32!CreateFileW // 对 CreateFileW 设定断点 0:000> g // 继续执行直到遇到设定好的断点 ``` 上述脚本首先设置了 Microsoft 符号文件下载目录,并重新载了模块列表以确保能够获取最新的符号表数据。接着查询了所有可能的目标函数变体,并最终选择了其中一个作为实际打断的位置。最后让程序继续运行直至命中指定断点为止。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值