[UNICODE[ESP+4]]=="J:\\电脑程序\\108Err.txt"
允许包含关系
[UNICODE[ESP+4]]=="J:\\电脑程序\\"
UNICODE [[ESP+4]]=="J:\\电脑程序\\"
注意:\ 要转译,否则无效。
bp CreateFileW,[UNICODE[ESP+4]]=="j:\\"
注意:
1.解码表达式的值为:”指向UNICODE 字串的指针”,而不是”指向ASCII字串的指针”或”通过表达式假定”
2.表达式为[ESP+4] 而不是[[UNICODE[ESP+4]]或UNICODE[ESP+4]
bp CreateFileA,[STRING[ESP+4]]=="j:\\"
转:http://blog.csdn.net/hgy413/article/details/7711925
以下演示如何下条件断点:
在调试过程中,经常希望断点满足一定条件时才中断,这类断点称为条件断点,
在OD的帮助文档有详细的说明:
(1)按寄存器条件中断:
用OD打开Conditional_bp.exe,在0040147c,按shift+F2设置条件断点:
输入表达式eax == 040000,这样如果eax为0400000h,OD将中断,
用OD帮助文档解释下:
040000- 所有整数常量都认为是十六进制的,除非后面跟了点
EAX - 寄存器EAX的内容,解释为无符号数
(2)按存储器条件中断
先看下CreateFileA函数:
运行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:
以下演示条件记录断点
条件记录断点除了具有条件断点作用,还能记录断点处函数表达式或参数的值,也可以设置通过断点的次数,每次符合暂停条件时,计数器减一
如要记录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(永远)等条件