在WinDBG中设置断点的命令

命令

==========

~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.

用户态的命令语法:

[~Thread] ba[ID] Access 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>>

posted on 2011-01-02 14:28  中道学友  阅读(6410)  评论(0编辑  收藏  举报

导航

技术追求准确,态度积极向上