系统运行时栈空间分析

作者:王靖  blog地址:http://blog.csdn.net/wang_jing_2008

 

实验环境:

实验平台:visual studio 2010 + Win 7x64

说明:编译器运行在Debug模式 Win32模式下。见图1

 

 

 

实验调试源码:

 

#include "stdafx.h"

#include <iostream>

#include <cstdio>

 

using namespace std;

 

int sum (int a,int b,int c)

{

    returna+b+c;

}

int main()

{

     int i=3;

     int j=4;

     int k=5;

     int m;

     m=sum(i,j,k); 

 

     return 0;

 

}

 

 

反汇编代码:

 

Main函数:

 

int main()

{

01131580  push       ebp 

01131581  mov        ebp,esp 

01131583  sub        esp,0F0h 

01131589  push       ebx 

0113158A  push       esi 

0113158B  push       edi 

0113158C  lea        edi,[ebp-0F0h] 

01131592  mov        ecx,3Ch 

01131597  mov        eax,0CCCCCCCCh 

0113159C  rep stos   dword ptr es:[edi] 

     inti=3;

0113159E  mov        dword ptr [i],3 

     intj=4;

011315A5  mov        dword ptr [j],4 

     intk=5;

011315AC  mov        dword ptr [k],5 

     intm;

     m=sum(i,j,k); 

011315B3  mov        eax,dword ptr [k] 

011315B6  push       eax 

011315B7  mov        ecx,dword ptr [j] 

011315BA  push       ecx 

011315BB  mov        edx,dword ptr [i] 

011315BE  push       edx 

011315BF  call       sum (1131258h) 

011315C4  add        esp,0Ch 

011315C7  mov        dword ptr [m],eax 

 

     return 0;

011315CA  xor        eax,eax 

 

}

011315CC  pop        edi 

011315CD  pop        esi 

011315CE  pop        ebx 

011315CF  add        esp,0F0h 

011315D5  cmp        ebp,esp 

011315D7  call       @ILT+405(__RTC_CheckEsp) (113119Ah) 

011315DC  mov        esp,ebp 

011315DE  pop        ebp 

011315DF  ret 

 

 

Sum函数:

int sum (int a,intb,int c)

{

011314E0  push       ebp 

011314E1  mov        ebp,esp 

011314E3  sub        esp,0C0h 

011314E9  push       ebx 

011314EA  push       esi 

011314EB  push       edi 

011314EC  lea        edi,[ebp-0C0h] 

011314F2  mov        ecx,30h 

011314F7  mov        eax,0CCCCCCCCh 

011314FC  rep stos   dword ptr es:[edi] 

    return a+b+c;

011314FE  mov        eax,dword ptr [a] 

01131501  add        eax,dword ptr [b] 

01131504  add        eax,dword ptr [c] 

}

01131507  pop        edi 

01131508  pop        esi 

01131509  pop        ebx 

0113150A  mov         esp,ebp 

0113150C  pop        ebp 

0113150D  ret

 

运行栈分析:

 

 

接下来我们分析main函数调用sum函数过程。

 

 

 

 

 

 

 

前面main函数退栈部分:

 

 

 

 

函数运行栈的情况:

 

 

 

 

自己看到一篇文章,不过我没阅读。放着给大家参考:http://blog.csdn.net/happylife1527/article/details/7915387

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值