pwn入门——4.栈&栈帧

0x00 栈介绍

栈是一种典型的后进先出 (Last in First Out) 的数据结构,其操作主要有压栈 (push) 与出栈 (pop) 两种操作,如下图所示。

两种操作都操作栈顶,当然,它也有栈底。

0x01 C语言函数调用栈

程序的执行过程可看作连续的函数调用。

当一个函数执行完毕时,程序要回到调用指令的下一条指令 (紧接 call 指令) 处继续执行。

函数调用过程通常使用堆栈实现,每个用户态进程对应一个调用栈结构 (call stack)。

编译器使用堆栈传递函数参数、保存返回地址、临时保存寄存器原有值(即函数调用的上下文) 以备恢复以及存储本地局部变量。

1. 寄存器分配

寄存器是处理器加工数据或运行程序的重要载体,用于存放程序执行中用到的数据和指令。

因此函数调用栈的实现与处理器寄存器组密切相关。

我们常见的一般都是intel 32位体系架构的处理器,包含 8 个四字节寄存器。

其中

  • ESP:堆栈指针寄存器,存放执行函数对应栈
  • 30
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值