• 在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>>

  • 相关阅读:
    ADO.NET Entity Framework之ObjectQuery
    高效byte[]和string互转的方法
    异步邮件发送
    ADO.NET Entity Framework之ObjectContext
    【转】Memcache and Mongodb
    一周工作总结一次SQL优化记录
    Ubuntu下有关Java和数据库的一些工作记录(一)
    自定义函数,替换字符串中指定位置的字符
    一次优化记录
    对比shrink和move
  • 原文地址:https://www.cnblogs.com/awpatp/p/1924085.html
Copyright © 2020-2023  润新知