你可以使用下面类C的运算符(0级最高):
优先级 类型 运算符
0 一元运算符 ! ~—
1 乘除运算 */ %
2 加减运算 —
3 位移动 <<>>
4 比较 < <= > >=
5 比较 == !=
6 按位与 &
7 按位异或 ^
8 按位或 |
9 逻辑与 &&
10 逻辑或 ||
在计算时,中间结果以 DWORD 或 FLOAT10 形式保存。某些类型组合和操作是不允许的。例如:QWODRD 类型只能显示;STRING 和 UNICODE只能进行加减操作(像C语言里的指针)以及与STRING、UNICODE 类型或串常量进行比较操作;你不能按位移动浮点[FLOAT] 类型,等等。
四、自定义函数描述[Custom function descriptions]
1、概论[Introduction]
OllyDbg包含(做为内部资源)1900多种标准函数以及400多种标准C函数的名称和参数。分析器[Analyzer]用这些描述使被调试程序更加易懂。比较下面一个例子,分析器的函数CreateFont:
PUSH OT.00469F2A ; ASCII "Times NewRoman"
PUSH 12
PUSH 2
PUSH 0
PUSH 0
PUSH 0
PUSH 0
PUSH 0
MOV EAX,DWORD PTR [49FA70]
PUSH EAX
PUSH 190
PUSH 0
PUSH 0
PUSH 0
PUSH 10
CALL <JMP.&GDI32.CreateFontA>
这是分析后的:
MOV EAX,DWORD PTR[49FA70]
PUSH OT.00469F2A ; / FaceName = "Times New Roman"
PUSH 12 ; | PitchAndFamily =VARIABLE_PITCH—>FF_ROMAN
PUSH 2 ; | Quality = PROOF_QUALITY
PUSH 0 ; | ClipPrecision =CLIP_DEFAULT_PRECIS
PUSH 0 ; | OutputPrecision =OUT_DEFAULT_PRECIS
PUSH 0 ; | CharSet =ANSI_CHARSET
PUSH 0 ; | StrikeOut = FALSE
PUSH 0 ; | Underline = FALSE
PUSH EAX ; | Italic => TRUE
PUSH 190 ; | Weight =FW_NORMAL
PUSH 0 ; | Orientation = 0
PUSH 0 ; | Escapement = 0
PUSH 0 ; | Width = 0
PUSH 10 ; | Height = 10 (16.)
CALL <JMP.&GDI32.CreateFontA>; \ CreateFontA
显然,后面的代码更容易理解。API函数CreateFont 有14个参数。分析器标记所有这些参数的名称并解码他们的。如果寄存器跟踪开启,那么分析器同时会解码参数Italic的为地址49FA70处双字长的内容。解码使用参数的真实,所以如果[49FA70]里的内容改变了,那么参数Italic的也会随之改变。当EIP指向跳转或调用该函数的命令,或指向入口时,OllyDbg也会在栈中对已知函数的参数进行解码。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/ruanjian/article-41789-28.html
26在哪里