| 该程序使用c++编写 0053C9C0是一个对象指针 0053C9C4也是一个对象指针
mov ecx, xxxxxxxx call xxxxxxx 这种形式一般都是调用成员函数,没有重载的非虚函数
mov ecx,aaaaaaaaaa mov eax,[ecx] call [eax+xxxxx] 一般是调用重载过的函数,因为要取虚函数表
如果发现 call [reg+xxxx] 前面的那个ecx不等于对象地址,或者对象地址压栈,则极可能是调用类的静态虚函数。 cmp ?,imm ja xxxxxxxxxx sub ?,imm jmp [xxxxxxxx+?*4] 顺序数的switch,xxxxxx一般在函数后面的不远处 ja 跳转的地址是default
mov [ebp-xxx],imm jmp xxxxxxxx zzzzzzzzzz .....calc with [ebp-xxx] cmp [ebp-xxx],imm (reg or param or localvar ) jge/je/..... yyyyyyyyy xxxxxxxx some codes 表示 for([ebp-xxx]=imm;条件(取决于比较和跳转);每次循环执行的操作(取决于calc)){} 后面的花括号在yyyyyyyyy的上一句,是一个jmp回zzzzzzzzzz的语句。
xxxxxxxxx cmp var,var 跳转 yyyyyyyyyy somecode jmp xxxxxxxxx yyyyyyyyyy some codes while(){}的汇编形式
cmp 跳转 a1 cmp 跳转 a2 a1:somecodes a2:somecodes a3: if( s1 || s2 )a1;
如果a1结束是 jmp a3 则 if(s1||s2)a1 else a2; 如果 两个或者多个条件跳转到另外的地址,而不是最后的条件下面的地址就是 ;; 连接条件。
| |