一个简单的学习程序,代码如下:
调试查看反汇编代码如下:
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