一只程序猿的养成日记 第一章 第六节 栈帧结构
来源:互联网 发布:淘宝食品店铺装修 编辑:程序博客网 时间:2024/06/08 17:39
第一步 初始化 建立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变量。
- 一只程序猿的养成日记 第一章 第六节 栈帧结构
- 一只程序猿的养成日记 第一章 第八节 栈帧结构补充
- 一只程序猿的养成日记 第一章 第四节 逻辑运算符的应用
- 一只程序猿的养成日记 第一章 第七节 三子棋的实现 有错求指导
- 一只程序猿的养成日记 第一章 第九节 小游戏 扫雷的实现
- 一只程序猿的养成日记 第一章 第一节 初接触
- 一只程序猿的养成日记 第一章 第十六节 递归方式实现打印一个整数的每一位
- 一只程序猿的养成日记 第一章 第十四节 递归和非递归分别实现strlen
- 一只程序猿的养成日记 第一章 第十五节 递归和非递归分别实现求n的阶乘
- 一只程序猿的养成日记 第一章 第十一节 编写一个函数实现n^k,使用递归实现
- 一只程序猿的养成日记 第一章 第十三节 编写一个函数reverse_string(char * string)(递归实现)
- 一只程序猿的养成日记 第一章 第十二节 输入一个非负整数,返回组成它的数字之和
- 一只程序猿的养成日记 第一章 第十节 递归和非递归分别实现求第n个斐波那契数
- 一个小白的程序猿养成日记01
- 一个小白的程序猿养成日记02
- 一直程序员的养成日记 第一章 第三节 错中求对
- 一直程序员的养成日记 第一章 第五节 识好文,转好文
- 程序猿日记(一)
- 经典排序算法
- iscsi
- 数据结构实验之图论一:基于邻接矩阵的广度优先搜索遍历
- 模板类与友元函数:关于LNK1120和LNK2019报错
- 马未都谈教育
- 一只程序猿的养成日记 第一章 第六节 栈帧结构
- make_pair的用法以及替代make_pair的结构体以及广度优先搜索
- Spring的ioc入门案例
- 38 Three.js高级材质THREE.ShaderMaterial
- String和StringBuffer
- 1040. 有几个PAT(25)
- redis学习笔记二(常规操作)
- 数据结构实验之图论八:欧拉回路
- 正在进行的激光雷达“世界大战”中,Axetomahawk先行一步