如何实现函数栈帧的创建与销毁的全过程自动化管理?
- 内容介绍
- 文章标签
- 相关推荐
本文共计2982个文字,预计阅读时间需要12分钟。
函数栈帧的创建和销毁 + 预备知识:相关汇编指令 + 数据转移指令mov + 数据入栈指令push + 数据出栈指令pop + 减少指令sub
(函数栈帧的创建和销毁)
预备知识:
相关汇编命令
mov:数据转移指令 push:数据入栈,同时esp栈顶寄存器也要发生改变 pop:数据弹出至指定位置,同时esp栈顶寄存器也要发生改变 sub:减法命令 add:加法命令 call:函数调用,1. 压入返回地址 2. 转入目标函数 jump:通过修改eip,转入目标函数,进行调用 ret:恢复返回地址,压入eip,类似pop eip命令
相关寄存器
eax:通用寄存器,保留临时数据,常用于返回值 ebx:通用寄存器,保留临时数据 <font color="#dd0000">ebp</font>:栈底寄存器 <font color="#dd0000">esp</font>:栈顶寄存器 eip:指令寄存器,保存当前指令的下一条指令的地址
什么是栈?
栈(stack)是现代计算机程序里最为重要的概念之一,几乎每一个程序都使用了栈,没有栈就没有函数,没有局部变量,也就没有我们如今看到的所有的计算机语言。
本文共计2982个文字,预计阅读时间需要12分钟。
函数栈帧的创建和销毁 + 预备知识:相关汇编指令 + 数据转移指令mov + 数据入栈指令push + 数据出栈指令pop + 减少指令sub
(函数栈帧的创建和销毁)
预备知识:
相关汇编命令
mov:数据转移指令 push:数据入栈,同时esp栈顶寄存器也要发生改变 pop:数据弹出至指定位置,同时esp栈顶寄存器也要发生改变 sub:减法命令 add:加法命令 call:函数调用,1. 压入返回地址 2. 转入目标函数 jump:通过修改eip,转入目标函数,进行调用 ret:恢复返回地址,压入eip,类似pop eip命令
相关寄存器
eax:通用寄存器,保留临时数据,常用于返回值 ebx:通用寄存器,保留临时数据 <font color="#dd0000">ebp</font>:栈底寄存器 <font color="#dd0000">esp</font>:栈顶寄存器 eip:指令寄存器,保存当前指令的下一条指令的地址
什么是栈?
栈(stack)是现代计算机程序里最为重要的概念之一,几乎每一个程序都使用了栈,没有栈就没有函数,没有局部变量,也就没有我们如今看到的所有的计算机语言。

