汇编代码对应的高级语言分析

该程序使用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;
如果 两个或者多个条件跳转到另外的地址,而不是最后的条件下面的地址就是 && 连接条件。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值