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;}}"
Windbg:如何给字符串下条件断点的更多相关文章
- js 正则判断字符串下划线的长度
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 使用PowerShell替代WinDbg在高分辨率笔记本下调试、排错
最近换新的开发笔记本,分辨率较高发现部分应用在High DPI下几乎没法用.比较纠结的就是WinDbg,频繁切换分辨率.显示文字大小影响工作节奏.幸好PowerShell在High DPI下效果不错. ...
- python学习之字符串(下)
----------------------------------------------实际应用中的其他常见的字符串方法 >>>line = "the knights ...
- 去掉vs2010字符串下红色波浪线
由于在vs集成了qt库,无法提升代码. 所以下载了visual assist,然后新的问题出现了,凡是在vs中输入的字符串,下面都有红色的波浪线,而且没有错误,只是看着不舒服. 解决方法: 在VAss ...
- js中字符串下划线转为驼峰
function camelCase(string){ // Support: IE9-11+ return string.replace( /-([a-z])/g, function( all, l ...
- CVE-2017-8464 分析
目录 CVE-2017-8464(stuxnet 3.0) 分析 0xFF 前言 0x00 分析工具 0x01 漏洞复现 1).生成一个DLL用于测试 2).构造一个恶意的lnk二进制文件 3).RU ...
- 学习使用常用的windbg命令(u、dt、ln、x)
http://blog.csdn.net/wesley2005/article/details/51501514 目录: (1) u命令(反汇编) (2) dt命令(查看数据结构) (3) ln命令( ...
- Windbg调试命令详解
作者:张佩][原文:http://www.yiiyee.cn/Blog] 1. 概述 用户成功安装微软Windows调试工具集后,能够在安装目录下发现四个调试器程序,分别是:cdb.exe.ntsd. ...
- Windbg调试命令详解(2)
转载注明>> [作者:张佩][原文:http://blog.csdn.net/blog_index] 2. 符号与源码 符号与源码是调试过程中的重要因素,它们使得枯燥生硬的调试内容更容易 ...
随机推荐
- java学习笔记_GUI(4)
import javax.swing.*; import java.awt.event.*; import java.awt.*; class MyPanel_0 extends JPanel { p ...
- Ueditor设置默认字体
其实很简单,只需要将ueditor.all.js 以及 ueditor.all.min.js 两个文件中的字体改掉即可 修改方法: 在ueditor.all.js中搜索:设置默认字体和字号: 在ued ...
- css3选择器二
在HTML中,通过各种各样的属性可以给元素增加很多附加的信息,了解和掌握css3一些的选择器,是很有必要的. :enabled 和 :disabled选择器表单元素有可用(“:enabled”)和不可 ...
- js自运行函数
学习闭包的基础知识: 函数声明 function fn(){ //这里是代码 }; fn(); //运行fn函数 与上面等价 var fn = function(){ //这里是代码 } fn(); ...
- PHP SQL注入的防范
说到网站安全就不得不提到SQL注入(SQL Injection),如果你用过ASP,对SQL注入一定有比较深的理解,PHP的安全性相对较高,这是因为MYSQL4以下的版本不支持子语句,而且当php.i ...
- php删除html标签的三种解决方法
分享下PHP删除HTMl标签的三种方法. 方法1:直接取出想要取出的标记 <?php //取出br标记 function strip($str) { $str=str_replace(" ...
- 百度地图api的实现
获取客户端IP地址经纬度所在城市 <?php $getIp=$_SERVER["REMOTE_ADDR"]; echo 'IP:',$getIp; echo ''; $con ...
- Python生成验证码
#!/usr/bin/env python #coding:utf8 import random #方法1: str_code='zxcvbnmasdfghjklqwertyuiopZXCVBNMAS ...
- C++ list 类学习笔记
双向循环链表list list是双向循环链表,,每一个元素都知道前面一个元素和后面一个元素.在STL中,list和vector一样,是两个常被使用的容器.和vector不一样的是,list不支持对元素 ...
- 四、mysql内置函数
.字符串函数 concat('a','b'); 字符串拼接函数 ,,"我是A我是B"): 从指定位置开始替换指定长度的指定数据(起步为1) lower() 转小写 upper() ...