流程控制--for循环
#include "stdafx.h" int main(int argc, char* argv[]) { int sum=0; for (int i=0;i<=100;i++) { sum=sum+i; } printf("sum=%d\n",sum); return 0; }
这是一个求1+2+3+...+100的和的过程。
int __cdecl main(int argc, const char **argv, const char **envp) { signed int v3; // eax@1 int v4; // ecx@1 v4 = 0; v3 = 0; do v4 += v3++; while ( v3 <= 100 ); printf("sum=%d\n", v4); return 0; }
我们看到,for循环被修改成了do-while循环,我们修改一下:
int __cdecl main(int argc, const char **argv, const char **envp) { signed int i; // eax@1 int sum; // ecx@1 sum = 0; i = 0; do sum += i++; while ( i <= 100 ); printf("sum=%d\n", sum); return 0; }
这里在把
sum += i++;
修改下:
sum+=i; i++;
即
sum=sum+i; i++;
我把它放到编译器里面在运行一次。
#include "stdafx.h" int main(int argc, char* argv[]) { signed int i; int sum; sum = 0; i = 0; do { sum=sum+i; i++; } while ( i <= 100 ); printf("sum=%d\n", sum); return 0;
其实我们更应该看的是反汇编代码,而不是IDA“翻译”后的代码。