Chinaunix首页 | 论坛 | 博客
  • 博客访问: 167541
  • 博文数量: 64
  • 博客积分: 3366
  • 博客等级: 中校
  • 技术积分: 765
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-10 10:32
文章分类

全部博文(64)

文章存档

2012年(5)

2011年(22)

2010年(37)

我的朋友

分类: C/C++

2010-09-11 16:11:26

在此主要讨论或者验证三点:
    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) |
给主人留下些什么吧!~~