c语言各种循环反汇编区别,反汇编--C语言(循环)

1:

2: int func(int a,int b)

3: {

//初始工作,和前面一致。

00401020 push ebp

00401021 mov ebp,esp

00401023 sub esp,48h

00401026 push ebx

00401027 push esi

00401028 push edi

00401029 lea edi,[ebp-48h]

0040102C mov ecx,12h

00401031 mov eax,0CCCCCCCCh

00401036 rep stos dword ptr [edi]

//这里进行加法运行 变量a、b、c都从堆栈中取出

4: int c=a+b;

00401038 mov eax,dword ptr [ebp+8]

0040103B add eax,dword ptr [ebp+0Ch]

0040103E mov dword ptr [ebp-4],eax

5: int i;

6: for(i=0;i<50;i++){

//将局部变量 i 置0 i从堆栈中取出

00401041 mov dword ptr [ebp-8],0

//跳转到00401053 处执行 比较i的值

00401048 jmp func+33h (00401053)

//这里用ecx寄存器装载变量i的值 进行累加

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

0040104D add ecx,1

00401050 mov dword ptr [ebp-8],ecx

//这里用 i 和 50(32h) 比较

00401053 cmp dword ptr [ebp-8],32h

//大于或者等于则跳转到00401064处

00401057 jge func+44h (00401064)

//进行加法运算 局部变量c的值从栈中取出

7: c=c+i;

00401059 mov edx,dword ptr [ebp-4]

0040105C add edx,dword ptr [ebp-8]

0040105F mov dword ptr [ebp-4],edx

8: }

//无条件跳转到0040104a处进行循环累加

00401062 jmp func+2Ah (0040104a)

9: return c;

//循环结束,将变量c的值赋给eax, eax保存返回值

00401064 mov eax,dword ptr [ebp-4]

10: }

//恢复各个寄存器的值

00401067 pop edi

00401068 pop esi

00401069 pop ebx

0040106A mov esp,ebp

0040106C pop ebp

//返回

0040106D ret

//主函数调用相同

11:

12: void main(){

00401070 push ebp

00401071 mov ebp,esp

00401073 sub esp,44h

00401076 push ebx

00401077 push esi

00401078 push edi

00401079 lea edi,[ebp-44h]

0040107C mov ecx,11h

00401081 mov eax,0CCCCCCCCh

00401086 rep stos dword ptr [edi]

13: int sum;

14: sum=func(2,5);

00401088 push 5

0040108A push 2

0040108C call @ILT+5(_func) (0040100a)

00401091 add esp,8

00401094 mov dword ptr [ebp-4],eax

15: return 0;

16: }

00401097 pop edi

00401098 pop esi

00401099 pop ebx

0040109A add esp,44h

0040109D cmp ebp,esp

0040109F call __chkesp (0040d470)

004010A4 mov esp,ebp

004010A6 pop ebp

004010A7 ret

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值