函数调用原理—栈帧

本文介绍了栈帧的背景知识,包括栈的生长方向、寄存器ebp和esp的作用。函数调用通过call指令保存当前指令地址并跳转,return指令恢复调用状态。以一个例子阐述了栈帧的开辟和恢复过程,以及函数调用时栈帧如何覆盖及恢复,最后提到了函数调用过程中的栈帧结构图。
摘要由CSDN通过智能技术生成

         关于栈帧的背景知识

       栈在地址空间中是向下生长,向下生长是指是从内存高地址到低地址的路径延伸,栈有栈顶和栈底,所以栈顶的地址要比栈底的地址低,对于x86体系的CPU而言,其中寄存器ebp可称为“帧指针”或“基底指针”,通常指向栈底,寄存器esp可称为“栈指针”,通常指向栈顶。

       ebp在未受改变之前始终指向栈帧的开始,也就是栈底。所以ebp的用途是在C堆栈中寻址用的。esp是会随着数据的入栈和出栈移动的,也就是说,esp始终指向栈顶。

       在CPU内部还存在一种寄存器——PC指针,它指向正在执行指令的下一条指令的地址。CPU工作时,通过调用的函数分别完成三个步骤取指令,分析指令,执行指令。PC指针又称程序计数器,指向正在执行指令的下一条指令。

       call:1.保存当前执行指令的下一条指令的地址。2.跳转到目标函数。

       return:当调用函数时,保留PC,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值