在此主要讨论或者验证三点:
1、循环结构的反汇编代码分析
2、函数中,局部变量的保存位置
3、方法的返回值保存位置验证
一个没有找到答案的疑问:
00401029 lea edi,[ebp-48h] 0040102C mov ecx,12h 00401031 mov eax,0CCCCCCCCh ;这段代码是在栈中开辟一个48字节大小的区域来存放局部变量,但是如果函数内没有局部变量,则是lea edi,[ebp-40h]一个局部变量,则是lea edi,[ebp-44h]两个局部变量,则是lea edi,[ebp-48h]也就是没有局部变量时开辟的40个字节,我用F11追踪过,单步调试时,这一部分区域并没有用到,这一区域的作用是什么?
代码如下:
1int sum()
2{
3 int subResult=0;
4 for (int i=0;i<3;i++)
5 {
6 subResult+=1;
7 }
8 return subResult;
9}
10
11void main()
12{
13 int result = sum();
14 printf("%\d\n",result);
15}