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

栈从高地址向低地址生长, __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...

最新文章

  1. char.js
  2. Effective Java 读书笔记之四 泛型
  3. Python模块常用的几种安装方式
  4. 树莓派wiringPi库详解
  5. 某代理网站免费IP地址抓取测试
  6. VirtualBox的网络配置,Host Only+NAT方式 (zhuan)
  7. 解决json包含html标签无法显示的问题
  8. hiho 1182 : 欧拉路·三
  9. nodejs端口被占用。
  10. HDU 4283 You are the one(间隔DP)
  11. Android: 工具使用备忘
  12. arcEngine开发之查询的相关接口
  13. 关于vue移动端的适配
  14. Maven 多模块引用版本的问题 java.lang.NoSuchMethodError
  15. object-fit 属性的用法介绍
  16. spark获取时间
  17. MT【62】柯西求三角值域
  18. Django缓存系统
  19. LInux 阿里云系统遇到挖矿程序
  20. 【Redis】Redis学习(六) Redis 基本运维

热门文章

  1. centos下 KeyboardInterrupt 退不出来的结局方法
  2. 洛谷 P2059 [JLOI2013]卡牌游戏(概率dp)
  3. Luogu P1282 多米诺骨牌 DP。。背包?
  4. HDU6395(分段+矩阵快速幂)
  5. AtCoder Beginner Contest 113 A
  6. UVALive - 3942 左儿子trie DP
  7. 1128 N Queens Puzzle (20 分)
  8. linux下解压rar文件
  9. Oracle KEEP的用法
  10. oracle12C--DG 状态集