现在的位置: 首页 > 综合 > 正文

反汇编之c语言for循环

2013年04月23日 ⁄ 综合 ⁄ 共 1187字 ⁄ 字号 评论关闭

一个简单的学习程序,代码如下:

调试查看反汇编代码如下:

int fun()
{
009C1A10  push        ebp 
009C1A11  mov         ebp,esp 
009C1A13  sub         esp,0D8h 
009C1A19  push        ebx 
009C1A1A  push        esi 
009C1A1B  push        edi 
009C1A1C  lea         edi,[ebp-0D8h] 
009C1A22  mov         ecx,36h 
009C1A27  mov         eax,0CCCCCCCCh 
009C1A2C  rep stos    dword ptr es:[edi] 
 int i,a = 0;
009C1A2E  mov         dword ptr [a],0 
 for(i = 0; i < 50; i ++)
009C1A35  mov         dword ptr [i],0 
009C1A3C  jmp         fun+37h (9C1A47h) 
009C1A3E  mov         eax,dword ptr [i] 
009C1A41  add         eax,1 
009C1A44  mov         dword ptr [i],eax 
009C1A47  cmp         dword ptr [i],32h 
009C1A4B  jge         fun+48h (9C1A58h) 
 {
  a += i;
009C1A4D  mov         eax,dword ptr [a] 
009C1A50  add         eax,dword ptr [i] 
009C1A53  mov         dword ptr [a],eax 
 }
009C1A56  jmp         fun+2Eh (9C1A3Eh) 
 return i;
009C1A58  mov         eax,dword ptr [i] 
}
009C1A5B  pop         edi 
009C1A5C  pop         esi 
009C1A5D  pop         ebx 
009C1A5E  mov         esp,ebp 
009C1A60  pop         ebp 
009C1A61  ret 

 

简单分析for反汇编代码如图:

 

for循环的执行流程是:

mov    <循环变量>,<初始值>

jmp     B

A:   (改变循环变量)

.................

B:  cmp   <循环变量>,< 限制的变量>

       jge   跳出for

       (循环体)

       .................

       jmp A

 

 

 

 

抱歉!评论已关闭.