zoukankan      html  css  js  c++  java
  • Windbg:如何给字符串下条件断点

        因为Windgb支持MASM语法,字符串的比较方法有$scmp和$sicmp。用法和c中的字符串比较方法一致。在需要比较字符串成员变量的时候,遇到了点问题。因为字符串成员变量无法直接获取字符串内容。poi指令是直接取地址。所以需要结合伪寄存器和别名进行封装。

    伪寄存器语句如下:

      1 r @$t0=@@(&this->_test._Bx._Buf)

    _test变量的类型为string。@@为C++语法表达式。

    别名的语句如下:

      1 as /ma ${/v:testAlias} @$t0

    此时使用al,即可看到testAlias的内容即为_test的内容。

    此时配合$sicmp指令的语句如下:

      1 .if($cicmp("${testAlias}","Test")==0)

    用来判断别名testAlias的内容是否等于“Test”,不区分大小写。

    此时再配上bp,就得到了以下语句:

      1 bp Module!Class::MemberFunc+0x90 "r @$t0=@@(&this->_test._Bx._Buf) as /ma ${/v:testAlias} @$t0 .if($sicmp("${testAlias}","Test")==0{}.else{}"

    但是此时会遇到两个问题:

    Q1:$sicmp的第一个参数值不重新计算

    Q2:testAlias的值没有更新

    第一个问题可以使用.block来解决:

      1 .block {.if($sicmp("${testAlias}","Test")==0{}.else{}}

    第二个问题可以使用ad /q testAlias来删除老的别名解决。所以最终的语句如下:

      1 bp Module!Class::MemberFunc+0x90 "r @$t0=@@(&this->_test._Bx._Buf) as /ma ${/v:testAlias} @$t0 .block{.if($sicmp("${testAlias}","Test")==0){.echo Found; ad /q testAlias;}.else{.echo Not Found; ad /q testAlias; gc;}}"
  • 相关阅读:
    django1.6 django-dajaxice的安装配置.
    jquery js ajax 不错的想法
    django1.6 GET url传参 乱码
    django1.6 CSRF verification failed. Request aborted. 用出现表单提交
    Caml语句中筛选lookup字段
    sharepoint Jsom一些基本操作
    JSOM启动工作流
    数据量太大时,如何实现分页查询-CSOM
    数据量太大时,如何实现分页查询-JSOM
    JS加强学习-DOM学习02
  • 原文地址:https://www.cnblogs.com/navono007/p/6242334.html
Copyright © 2011-2022 走看看