以下演示如何下条件断点:

在调试过程中,经常希望断点满足一定条件时才中断,这类断点称为条件断点,

在OD的帮助文档有详细的说明:

(1)按寄存器条件中断:

用OD打开Conditional_bp.exe,在0040147c,按shift+F2设置条件断点:

输入表达式eax == 040000,这样如果eax为0400000h,OD将中断,

用OD帮助文档解释下:

040000- 所有整数常量都认为是十六进制的,除非后面跟了点

EAX - 寄存器EAX的内容,解释为无符号数

(2)按存储器条件中断

先看下CreateFileA函数:

[cpp] view plaincopy
  1. HANDLE WINAPI CreateFile(
  2. __in          LPCTSTR lpFileName,//指向文件名的指针
  3. __in          DWORD dwDesiredAccess,
  4. __in          DWORD dwShareMode,
  5. __in          LPSECURITY_ATTRIBUTES lpSecurityAttributes,
  6. __in          DWORD dwCreationDisposition,
  7. __in          DWORD dwFlagsAndAttributes,
  8. __in          HANDLE hTemplateFile
  9. );

运行Conditional_bp.exe,对CreateFileA设断,单击OpenTest按钮,断下来,在堆栈窗口单击右键,执行Address/Relative to ESP(地址/相对于ESP)菜单:

则堆栈窗口最左边标识了各参数相对于当前ESP的地址:

假设当CreateFile打开"c:\\1212.txt"时实现中断,则shift+F2

键入字符 [STRING[esp+4]] =="c:\\1212.txt"

用OD帮助文档解释下:

[esp+4] - 在地址esp+4处的无符号双字内容

STRING [123456] - 以地址123456作为开始,以零作为结尾的ASCII字符串。中括号是必须的,因为您要显示内存的内容
[STRING 123456]=="Brown fox" - 如果从地址0x00123456开始的内存为ASCII字符串"Brown fox"、"BROWN FOX JUMPS"、 "brown fox???",或类似的串,那么其值为1。比较不区分大小写和文本长度

EAX=="Brown fox" - 同上,EAX按指针对待。

UNICODE [EAX]=="Brown fox" - OllyDbg认为EAX是一个指向UNICODE串的指针,并将其转换为ASCII,然后与文本常量进行比较

运行,断了下来

也可直接在CMD框中输入bp CreateFileA,[STRING[esp+4]]=="c:\\1212.txt"(注意CreateFileA大小写别错了,中间有无逗号没有影响)

如果是UNICODE,就用[UNICODE[ESP+4]]=="c:\\1212.txt"

OD条件断点BUG:

[cpp] view plaincopy
  1. 首先我们看一下 CreateFileA 在 MSDN 中的解释:
  2. HANDLE CreateFile(
  3. LPCTSTR lpFileName,          // pointer to name of the file
  4. DWORD dwDesiredAccess,       // access (read-write) mode
  5. DWORD dwShareMode,           // share mode
  6. LPSECURITY_ATTRIBUTES lpSecurityAttributes,
  7. // pointer to security attributes
  8. DWORD dwCreationDisposition,  // how to create
  9. DWORD dwFlagsAndAttributes,  // file attributes
  10. HANDLE hTemplateFile         // handle to file with attributes to
  11. // copy
  12. );

从上面我们可以看出第一个参数就是文件名指针,也就是说这个参数中存放的就是文件名称的地址。在32位程序中调用这个函数时这个参数的堆栈地址就应该是esp+4(4×8=32),同理,下一个参数就应该是esp+8。其它类推,返回值是esp+0。我们现在要判断文件名,这里的文件名就是esp+4地址所指向的地址中的内容。取地址中的内容在OD中用双方括号来操作,如取esp+4中的内容就该写成这样:[esp+4]。现在我们取的[esp+4]中的内容还是个地址,所以要得到文件名则还要再取这个地址中的内容,就该这样:[[esp+4]]。而那个STRING前缀在OD中的解释是以零作为结尾的ASCII字符串。所以我们下条件断点时这样写:
bp CreateFileA,[STRING [esp+4]]=="abcdefghigklmn"
但却发现断不下来,写成这样:
bp CreateFileA,[[STRING [esp+4]]]=="abcdefghigklmn"
才能断下来,这里就应该是三层的地址了。为什么这样目前尚不清楚

以下演示条件记录断点

条件记录断点除了具有条件断点作用,还能记录断点处函数表达式或参数的值,也可以设置通过断点的次数,每次符合暂停条件时,计数器减一

如要记录Conditional_bp.exe调用CreateFileA函数的情况,在CreateFileA函数的第一行,按Shift+F4键,出现条件记录窗口:

在Condition(条件)域中输入要设置的条件表达式,

Explanation(说明)域中由用户自己设置一个名称,Expression(表达式)域中是要记录的内容的条件,只能设置一个表达式,如填的是[ESP+4},则要选择"Pointer to ASCII String",才能正确打印出字符串,

Pause program是指OD遇到断点时是否中断,Log value of expression是指遇到断点时是否记录表达式的值, Log function arguments是指遇到断点时是澡记录函数参数,

Never(从不),On condition(按条件),Always(永远)等条件

5.OD-条件断点、条件记录断点相关推荐

  1. 条件断点、条件记录断点

    一.条件断点 1.下断方式:shit+f2,即可在某条指令上设置条件断点,之后会弹出一个框,让我们设置条件 当到这条指令并且满足条件的时候,就会在此断住 2.条件语句很灵活,不只是可以设置一个条件,可 ...

  2. VS2012 使用条件断点和内存断点

    文章目录 1.条件断点 2.内存断点 参考文献 1.条件断点 条件断点是指在达到设置的条件时才触发的断点. 这在调试复杂问题时非常有用,比如循环程序.例如下面的代码片段: int a=0; for(i ...

  3. idea条件断点和异常断点

    在好多时候使用条件断点和异常断点有奇效,而且高效 条件断点: 调试的时候,在循环里增加条件判断,可以极大的提高效率,心情也能愉悦.以下介绍下IDEA使用条件[Condition]断点的方法 1.编写一 ...

  4. OD破解软件找断点方法系列【2】----万能断点法(XP系统)

    [文章标题]: OD 破解软件找断点方法系列[2]----万能断点法(XP系统) [文章作者]: HPKEr [软件名称]: MP3转换器 V5.2.0 [软件大小]: 3.20 MB [下载地址]: ...

  5. 维护条件记录_销项税(MWST)

    维护条件记录_销项税(MWST) (2009-08-01 21:49:53) 标签: sap erp sd 条件 销项税 分类: SD/LO 博客迁至http://www.fenginfo.com 有 ...

  6. OD学习手记——常用断点

    汇编 32位CPU所含有的寄存器有: 4个数据寄存器(EAX.EBX.ECX和EDX)对低16位数据的存取,不会影响高16位的数据.这些低16位寄存器分别命名为:AX.BX.CX和DX,它和先前的CP ...

  7. 汇编命令及OD常用命令及断点设置

    汇编 32位CPU所含有的寄存器有: 4个数据寄存器(EAX.EBX.ECX和EDX)对低16位数据的存取,不会影响高16位的数据.这些低16位寄存器分别命名为:AX.BX.CX和DX,它和先前的CP ...

  8. 2022年4月26日华为OD机试记录

    考试时间150分钟,三道题分别是100,100,200分,考了370分,是自己自学了一个月的结果,其实最麻烦的感觉还是第二道题,因为第三题我知道自己错在哪里却没有时间去改了,就没有改了. 第一题:分解 ...

  9. OD调试器断点——条件断点

    文章目录 条件断点 条件记录断点 条件断点 条件断点实际上就是普通的CC断点,只不过该断点的触发需要满足设置的条件,如果满足设置的条件,那么程序就会中断下来,如果不满足条件的话,就和没有设置CC断点差 ...

最新文章

  1. jQuery 插件 jSlider 图片轮播
  2. java文件递归_java递归处理文件夹和文件
  3. python基础教程:可变,不可变数据类型
  4. arcgis导入excel数据_导入Excel数据到ArcGIS属性表的两种实用方法
  5. zuulfilter添加例外_SpringCloud之Zuul 自定义filter
  6. centos8.4 nginx 问题
  7. php 截取某个字符,PHP_php截取指定2个字符之间字符串的方法,本文实例讲述了php截取指定2个 - phpStudy...
  8. 谈判失败:Oracle杀死Java EE
  9. python3写网络爬虫_python3写网络爬虫
  10. mysql下载备份数据库命令行_MYSQL 数据库导入导出命令 | 很文博客
  11. C语言选择题(含答案)
  12. 原子结构示意图全部_原子结构示意图大全
  13. ios safari 模拟器_电脑也能运行iOS iOS模拟器体验
  14. 新编16 32位微型计算机答案,新编1632位微型计算机原理及应用.习题解答.ppt
  15. 批量tracert脚本
  16. 2017腾讯校招暑期实习生笔试题3
  17. 【教资必过!!!】思想品德课程理论基本知识
  18. virt-install安装虚拟机
  19. SPI Flash芯片W25Q32英文版数据手册解读(二)---------存储器知识,寄存器
  20. 【U盘刷机】小米路由器变砖如何100%刷机成功

热门文章

  1. spring FactoryBean的知识应用和Beanfactory的区别
  2. 对象的序列化流_ObjectOutputStream
  3. 使用Properties集合存储数据,遍历取出Properties集合中的数据
  4. tcp3次握手、4次挥手
  5. Topic交换器-编写消费者
  6. SpringBoot高级消息-RabbitMQ运行机制
  7. php显示评委打分情况代码,评委打分表自动汇总计算得分
  8. html语言 input button,Html-button和input的区别
  9. Vim键盘图/Vim快捷键
  10. java.net.SocketException: Unrecognized Windows Sockets error: 0: JVM_Bind