for循环是各种编程语言中常用的语句;其基本的格式为:
for (循环变量 ; bool 表达式; 操作) {
// TODO ...
}
一般会需要一个循环变量,这个循环变量一般也会在函数体内完成声明和初始化,若是这样的情况,则这个变量即被作为函数的局部变量处理,分配在栈上。
以下编写一个简单的C程序,完成从0 加到 某个数的和运算,并分析其反汇编代码。
/*
author : ez
date : 2015/5/7
file : desasm.c
*/
#include <stdio.h>
#include <stdlib.h>
int test_forall (int _last) {
int i , sum = 0;
i &= 0;
for (; i < _last; i ++) {
sum += i;
}
return sum;
}
int main (argc, argv)
int argc;
char* argv [];
{
int res = 0;
res = test_forall (64);
printf ("res = %d\r\n", res);
return 0;
}
以上的test_forall () 函数即是我们分析的重点。
下面分别使用vc 编译器和 gcc编译器,选择Debug 和Release 进行编译分析。以下操作系统均为 Windows 7 Sp1,并编译成32位程序。反汇编工具使用 OllyDbg version 2.0
1、 gcc version 4.8.1 (tdm64-2) :