WinDbg:栈帧的含义

转自:http://www.cppblog.com/weiym/archive/2012/06/07/177958.html

image

栈从高地址向低地址生长, __stcall和__cdecl调用约定都是函数参数从右到左入栈。

某函数,比如:

int add(int a, int b) { return a + b;}

在我们调用 add(1, 2)时:

  1. 从栈高地址到低地址入栈,依次是:参数2入栈, 参数1入栈,返回地址(ret address)入栈
  2. 接着跑到 add 函数执行入口代码 push ebp 即上一函数帧的基址(ebp)入栈
  3. 然后 mov ebp, esp 将当前的栈指针值赋给ebp,即保存当前的栈指针给ebp,这样可以用新的 ebp 操作当前函数的局部变量,该函数内部再调用某个函数时也能通过新 ebp 知道上一函数的基栈地址,所有函数调用都以此类推

所以从堆栈低地址到高地址依次表示:ebp(上一函数的栈帧基址)、ret address、parameter 1、 parameter 2...

转载于:https://www.cnblogs.com/qinfengxiaoyue/p/3399537.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值