[STRING123456]=="Brown fox"—如果从地址0x00123456开始的内存为ASCII字符串"Brownfox"、"BROWN FOX JUMPS"、 "brown fox???",或类的串,那么其为1。比较不区分大小写和文本长度。
EAX=="Brownfox"—同上,EAX按指针对待。
UNICODE[EAX]=="Brown fox"—OllyDbg认为EAX是一个指向UNICODE串的指针,并将其转换为ASCII,然后与文本常量进行比较。
[ESP8]==WM_PAINT—i在表达式中你可以使用上百种Windows API符号常量。
([BYTE ESIDWORDDS:[45000015*(EAX—1)> & 0F0)!=0—这绝对是个有效的表达式。
现在我们介绍语法式。在大括号({})内的每个元素都只能出现一次,括号内的元素顺序可以交换:
表达式 = 内存中间码|内存中间码<二元操作符>内存中间码
内存中间码 = 中间码 | { 符号标志 大小标志 前缀} [表达式 ]
中间码 =(表达式) | 一元操作符 内存中间码 | 带符号寄存器 | 寄存器 | FPU寄存器 | 段寄存器 | 整型常量 | 浮点常量 | 串常量 | 参数 | 伪变量
一元操作符 = ! | ~ | |
带符号寄存器 = 寄存器.
寄存器 = AL | BL |CL ... | AX | BX | CX... | EAX | EBX | ECX...
FPU寄存器 = ST | ST0 | ST1 ...
段寄存器 = CS | DS | ES | SS| FS | GS
整型常量 = <十进制常量>. | <十六进制常量> | <字符常量> | <API符号常量>
浮点常量 = <符点常量>
串常量 = "<串常量>"
符号标志 = SIGNED | UNSIGNED
大小标志 = BYTE | CHAR | WORD| SHORT | DWORD | LONG | QWORD | FLOAT | DOUBLE | FLOAT10 | STRING | UNICODE
前缀 = 中间码:
参数 = %A | %B // 仅允许在监察器[inspector] 中使用
伪变量 = MSG // 窗口消息中的代码
这个语法并不严。在解释[WORD [EAX]]或类的表达式时会产生歧义。可以理解为以寄存器EAX所指向地址的两字节内容为地址,所指向的双字内容;也可以理解为以寄存器EAX所指向地址的四字节内容为地址,所指向的两字节内容。而OllyDbg会将修饰符尽可能的放在地址最外面,所以在这种情况下,[WORD [EAX]]等价于 WORD 。
默认情况下,BYTE、WORD 和 DWORD 都是无符号的,而CHAR、SHORT 和 LONG都是带符号的。也可以使用明确的修饰符SIGNED 或 UNSIGNED。例如在二元操作时,如果一个操作数是浮点的,那么另外一个就要转成浮点数;或者如果一个是无符号胆,那么另外一个要转成无符号的。浮点类型不支持UNSIGNED。大小修饰符后面跟MASM兼容关键字PTR(如:BYTE PTR)也允许的,也可以不要PTR。寄存器名和大小修饰符不区分大小写。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/ruanjian/article-41789-27.html
这事就算了
一个月3g分两个月送吗