zoukankan      html  css  js  c++  java
  • WinDBG中设置条件断点

    条件断点:断点指令 + “j(Excecute If-Else) 和 gc (Go from Conditional Breakpoint)”
    形如:bp Address "j (Condition) 'OptionalCommands'; 'gc' "

    这里仅简单说明该如何写后面的条件语句

    1. 非结构体变量:       
            "j (poi(MyVar)>5) '';'gc'"
       在代码中,MyVar是整数变量。默认的debug配置采用MASM语法,因此MyVar被当作指针看待,在做条件判断时,需要使用poi解引用。如果debug配置采用C++语法,MyVar会被解析为整数变量,可直接用于条件判断。条件为真时对应的语句为空,则当条件满足时,会断在此处。gc表示从断点处继续运行。

    2. 结构体变量
            "j (@@c++(MyStruct->field)>5) '';'gc'"
       判断结构体变量中的某个成员变量时,采用C++语法解析表达式:@@c++(...)。因默认配置是masm语法,故对于结构体成员都用此种方法解析。

    3. 寄存器
    1        "j @eax = 0xa3 ''; 'gc'"                                     <1>
    2        "j @eax = 0xc0004321 '';'gc'"                            <2>
    3        "j (@eax & 0x0`ffffffff) = 0x0`c0004321 '';'gc'"     <3>

       式<1>:当eax的值为0xa3时,触发该断点。
       在masm表达式中,寄存器是做符号扩展的,即0xc0004321实际被当作是0xffffffff`c0004321,即便实际显示时是0xc00004321。这种符号扩展仅存在于kernel mode中。因此式<2>在kernel mode会失败。最好的改法则是按照式<3>的方式做条件比较,该方式可以同时用于kernel mode和user mode。

    此外,还有针对于伪寄存器的写表达式方法,等用到时再看吧。
  • 相关阅读:
    vcsa7.0可能不兼容esxi6.7
    使用livecd 更改root密码
    虚拟机初始化脚本
    一句话修改UUID
    vcsa 6.7 u1升级6.7 u2--6.7U3---6.7U3c
    【转载】:FreeRadius安装及与openldap的连接(centos 7 环境)
    freeradius 关联LDAP认证-按属性过滤LDAP目录中的用户
    使用包ldap3进行Python的LDAP操作
    2020年1月29日-学习flask第一天
    Python-xlwt库的基本使用
  • 原文地址:https://www.cnblogs.com/dust/p/1168189.html
Copyright © 2011-2022 走看看