堆栈段

  • Post author:
  • Post category:其他


1  介绍

堆栈段(stacksegment)通常是指采用堆栈方式工作的一段内存区域。当程序被执行时,程序可能会将其执行的状态加入栈的顶部;当程序结束时,它必须把栈顶的状态数据弹出(pop)。

2  存储形式

ebp是栈底寄存器

esp是栈顶寄存器

每4字节的栈空间保存一个数据,当esp小于ebp时,就形成了栈帧

3  使用指令

push:压栈操作,把数据写入到esp执行的堆栈上,然后esp减4

pop:出栈操作,从esp执行的地址上获取一个数据,然后esp加4

读取堆栈内容:有两种寻址方式,ebp寻址(以ebp为基准的变量地址表示方式)和esp寻址(以esp为基准的变量地址表示方式)

4  用途

在采用段式内存管理方式进行程序内存分配的架构中,堆栈段用来存放局部变量和函数返回地址。

理论上,最小的栈可能是一个仅能保存函数调用(function call) 地址的结构,以致被调用的函数能根据该地址返回(return)到原函数里。除此功能以外,开发者也可以将栈另作他用。

5  使用方式

堆栈段是在程序运行时动态分配使用,只需要通过栈顶指针即可访问。目前大多数CPU中都有专用寄存器可以被用来存放栈顶地址。

5.1  生成栈帧

pushebp            ;保存前面函数的栈底到当前的栈上



版权声明:本文为luck_donkey原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。