《伏C录》凝丹篇-函数栈帧理解手册

目录

一、前面

二、预备知识

三、栈帧创建与销毁

四、总结


古岂无人!孤标凌云道为朋,剑宿吾命,亦狂亦侠亦超尘。

 

一、前面

本章将以汇编视角看函数栈帧的内存是如何使用与回收的,为了降低汇编语言的理解成本,以图示的方式讲解每一步汇编指令所带来的效果,来逐步展示函数栈帧的形成与销毁的整个过程。

展示环境:win10 && vs2019

、预备知识

这些预备知识理解与否对本篇文章并无很大关系,之所以预备这些知识是为了让读者能够更加相信函数栈帧的形成与销毁过程就是如此。

栈区:内存四区之一,内存为了使用和管理,被划分为四部分,其中栈区就是内存被划分的区域之一,栈的使用习惯是,先使用高地址部分,在使用底地址部分。

函数栈帧:即在调用函数时,为函数开辟的一块内存空间,由于该内存空间在栈区,因此该空间被称作函数栈帧,简称栈帧。

栈顶:故名思意,就是栈的顶部,更确切的说是指向存放在栈区数据的顶部。

栈底:栈的底部。

寄存器:寄存器cpu内部用来存放数据的一些小型存储区域,用来暂时存放参与运算的数据和运算结果。简单来说就是独立于内存,用来存储少量数据的器件。

ebp:栈底指针寄存器

esp:栈底指针寄存器

其它寄存器:ebx、esi、edi、ecx、eax

入栈(压栈):先将栈顶指针向上移动四字节的大小空间,再将寄存器的数据放入那四字节空间。这里的向上移动是指向低地址处移动。

入栈指令:push a。

图解以push a为例。

 出栈:将栈顶指针向下移动四字节,这里的向下是往低地址处移动四个字节的空间。并将这四个字节的数据放入某个寄存器中。

出栈指令:pop a。

图解:以pop  a为例。

简单汇编操作指令

mov a b:将b赋值给a,c语言表示就是a=b。

sub a b:将a-b的结果赋值给a,c语言表述就是a=a-b。

add a b :将a+b的结果赋值给a,c语言表述就是a=a+b。

由于理解成本的原因,遇到的其它汇编指令本文会直接指出它的作用效果。</

评论 68
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李逢溪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值