用汇编的角度学C (二)

我首先看一下vs2013,简单写的C代码:

int    cainiao2022(int a,int b)
{
    int c=a+b;
    for(int i=0;i<10;i++)
        {
        c=c+i;
        }
      return c;
}

void    main()
{
    cainiao2022(1,2);
}

变动的只是cainiao2022()里面加了一个for循环,我们就从for循环那里看就行了
------------------------------------------------------------------------------

4:        for(int i=0;i<10;i++)
00401041   mov         dword ptr [ebp-8],  0    

;上一个动画我们提到[ebp-4]处为第一个局部变量(这里是c)
;那么这里的[ebp-8]就是第二个局部变量i
;对i赋值i=0
00401048   jmp         cainiao2022+33h (00401053)    ;赋值后跳到00401053

;上面2句的模板是这样的:

;mov    <循环变量>,<初值>
;jmp    检查循环条件


0040104A   mov         ecx,dword ptr [ebp-8]    

;把i的值给ecx
0040104D   add         ecx,1            

;ecx加1
00401050   mov         dword ptr [ebp-8],ecx    

;加1后的ecx给i,这样通过ecx互换实现i++


;上面3句只是简单的实现i++,然后让下面的比较语句去比较

00401053   cmp         dword ptr [ebp-8],0Ah    

;来到这里,i的值与0Ah比较,也就是10比较
00401057   jge         cainiao2022+44h (00401064)    

;i大于或等于0Ah就跳转,就是说小于10时执行循环
;上面2句的模板是这样的:
;cmp    <循环变量>,<限制条件>
;jge    跳出循环
;(循环体)
5:            {
6:                c=c+i;
00401059   mov         edx,dword ptr [ebp-4]    ;把第一个局部变量c给edx
0040105C   add         edx,dword ptr [ebp-8]    ;把第二个局部变量i加edx
0040105F   mov         dword ptr [ebp-4],edx    ;把相加的结果给c,就是c=c+i

;上面3句是循环体了,非常的简单,只要弄懂[ebp-N]就行了


7:            }
00401062   jmp         cainiao2022+2Ah (0040104a)    

;跳会修改循环变量继续循环,这里是跳回i++那里

;这句也是模板
;jmp    修改循环变量
8:        return c;
00401064   mov         eax,dword ptr [ebp-4]    ;把c的值给eax作为函数返回的结果


;所有的函数默认都是用eax作返回值。这个定理在爆破的时候非常的有用。


------------------------------------------------------------------------------

总结一个for循环的反汇编结构如下:

    mov    <循环变量>,<初值>
    jmp    检查循环条件B
A:    (修改循环变量)
    ...
    ...

B:    cmp    <循环变量>,<限制条件>
    jge    跳出循环
    (循环体)
    ...
    ...
      jmp    修改循环变量A
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菜鸟来了2022

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值