逆向工程 0x02

最基础的汇编指令

常用的汇编指令

指令示例含义说明
MovMov EAX,ECXEAX=ECX将ECX的值存入EAX
ADDADD EAX,ECXEAX+=ECX将EAX的值加上ECX的值
SUBSUB EAX,ECXEAX-=ECX将EAX的值减去ECX的值
INCINC EAXEAX++将EAX的值加1
DECDEC EAXEAX–将EAX的值减1
LEALEA EAX,[ECX+4]EAX=ECX+4将ECX+4的值出去EAX
CMPCMP EAX,ECXif(EAX==ECX) ZF=1
else ZF=0
对两个值进行比较根据比较的结果设置标志位
若EAX于ECX相同,ZF=1
若EAX于ECX不相同,ZF=0
TESTTEST EAX,EAXif(EAX==0) ZF=1
else ZF=0
将值与0比较根据比较结果设置标志位
若EAX等于0,ZF=1
若EAX不等于0,则ZF=0
JE(JZ)JE 04001000if(ZF==1)
GOTO 04001000
若ZF=1,则跳转到04001000
JNE(JNZ)JNE 04001000if(ZF==0)
GOTO 04001000
若ZF=0,则跳转到04001000
JMPJMP 04001000GOTO 04001000无条件跳转到04001000
CALLCALL lstrcmpW调用lstrcmpW
PUSHPUSH 00000001压栈
POPPOP EAX出栈并将获取的值存入EAX寄存器

Notice:
只要看到带有两个相同寄存器的test指令,一般就是条件分支,可以简单的理解成若寄存器值为0,则ZF=1;

将JNZ和TEST指令结合起来就是:

test eax,eax
jnz 04001000
  • 若EAX值为0,则跳转
  • 若EAX值为1,不跳转

call指令是用来调用子程序,返回值一般存放在EAX寄存器中。
子程序的参数一般存放在栈中,用push指令压入。参数是从后往前的顺序压入。


学习编写汇编码我之前有写过专门的博文来讲解具体的操作和用到工具。
参见:http://blog.csdn.net/chengyu779394084/article/details/50325993

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值