在此主要讨论或者验证三点:
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}
由于方法的调用已经在上一篇中说过,这里直接分析内部有循环结构的sum()方法
反汇编代码及分析:
5: int sum()
6: {
00401020 push ebp
;ESP = 0012FEF0 EBP = 0012FF48
00401021 mov ebp,esp
;ESP = 0012FEF0 EBP = 0012FEF0
00401023 sub esp,48h
;ESP = 0012FEA8 EBP = 0012FEF0
00401026 push ebx
00401027 push esi
00401028 push edi
00401029 lea edi,[ebp-48h] 0040102C mov ecx,12h 00401031 mov eax,0CCCCCCCCh
00401036 rep stos dword ptr [edi]
7: int subResult=0;
00401038 mov dword ptr [ebp-4],0
TAG标签:
本文转自 ☆★ 包罗万象网 ★☆ - 转载请注明出处,侵权必究!
原文链接:
阅读(999) | 评论(0) | 转发(0) |