一只程序猿的养成日记 第一章 第八节 栈帧结构补充
来源:互联网 发布:知乎新人 编辑:程序博客网 时间:2024/06/10 06:49
上次发的栈帧结构,莫名图片被挡掉了
重新写一次
如果有错误请各位大神指出,谢谢
第一步 初始化 建立mian函数的栈帧结构。
第二步 初始化 存储 变量“a”
第三步 初始化 存储 变量“b”
第四步 将变量“b”的值存储到 寄存器 “eax” 并将 寄存器压入 “main” 函数的栈帧中。
第五步 将变量“a”的值存储到 寄存器 “ecx” 并将 寄存器压入 “main” 函数的栈帧中。
第六步 call 命令:1,将当前命令的下一条指令的 地址 压入栈中,作为返回时的地址。
2,随即,跳转至指定函数。(jmp)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
第七步 将 “ebp”寄存器中的地址 压入栈中;
第八步 将“ebp”栈底寄存器下移 与“esp”重合;
第九步 将“esp”栈顶寄存器下移44h,创建属于my-add的栈帧;
第十步 将“ebp”+8即“a”的值写入“eax”寄存器后,再与“ebp”+12即“b”完成相加。相加后的值存入“eax”寄存器压入my-add函数的栈底。
第十一步 返回 将“ebp”-4即z的值存储在寄存器“eax”中。
第十二步 将“esp”寄存器与“ebp”重合,释放my-add函数的栈帧。
第十三步 “pop”指令将“main-ebp”放入“ebp”寄存器,“esp”栈顶寄存器随机上移,“ebp”寄存器回到“main”函数栈底。
第十四步 “ret”指令 跳出函数 将“main-ret”保存到“eip”寄存器。
第十五步 “esp”栈顶寄存器上移8回到最初的位置;将“eax”中存放的z的值即a+b赋值给c变量。
- 一只程序猿的养成日记 第一章 第八节 栈帧结构补充
- 一只程序猿的养成日记 第一章 第六节 栈帧结构
- 一只程序猿的养成日记 第一章 第四节 逻辑运算符的应用
- 一只程序猿的养成日记 第一章 第七节 三子棋的实现 有错求指导
- 一只程序猿的养成日记 第一章 第九节 小游戏 扫雷的实现
- 一只程序猿的养成日记 第一章 第一节 初接触
- 一只程序猿的养成日记 第一章 第十节 递归和非递归分别实现求第n个斐波那契数
- 一只程序猿的养成日记 第一章 第十五节 递归和非递归分别实现求n的阶乘
- 一只程序猿的养成日记 第一章 第十六节 递归方式实现打印一个整数的每一位
- 一只程序猿的养成日记 第一章 第十一节 编写一个函数实现n^k,使用递归实现
- 一只程序猿的养成日记 第一章 第十三节 编写一个函数reverse_string(char * string)(递归实现)
- 一只程序猿的养成日记 第一章 第十四节 递归和非递归分别实现strlen
- 一只程序猿的养成日记 第一章 第十二节 输入一个非负整数,返回组成它的数字之和
- 一直程序员的养成日记 第一章 第三节 错中求对
- 一直程序员的养成日记 第一章 第五节 识好文,转好文
- 第一章 第八节 介绍选项
- 一个小白的程序猿养成日记01
- 一个小白的程序猿养成日记02
- Centos下tomcat 8080端口不显示tomcat页面
- Spark on Yarn:任务提交参数配置
- 一篇文章,全面总结Android面试知识点
- 全方位对网站做seo诊断需考虑的点点滴滴
- 文章标题
- 一只程序猿的养成日记 第一章 第八节 栈帧结构补充
- Android的IPC机制
- 链式队列的C++实现
- JS知识点小结
- Python将纳入高考?
- 新建的maven项目src/main/java(missing)怎么办
- python smtp QQ邮箱 发送附件
- FCN(Fully convolutional networks)阅读
- iOS 本地动态验证码生成