加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

EBP和ESP在Unix系统中的调用机制

发布时间:2020-12-15 19:38:07 所属栏目:安全 来源:网络整理
导读:首先 Unix系统中栈是由高地址向低地址生长。EBP永远指向基地址,ESP(活动)指向高地址。 对于一段进程,进入主调用(主函数)时, EBP指向ESP的位置,(指向空栈,此时栈是空的,两者的位置相同) 之后ESP活动根据偏移量取得参数,推展栈生长(向低地址生长) ES

首先 Unix系统中栈是由高地址向低地址生长。EBP永远指向基地址,ESP(活动)指向高地址。

对于一段进程,进入主调用(主函数)时,

EBP指向ESP的位置,(指向空栈,此时栈是空的,两者的位置相同)

之后ESP活动根据偏移量取得参数,推展栈生长(向低地址生长)

ESP越走越远,EBP原地待命,ESP碰到CALL调用此进程中的另一个方法(fun_A)

由ESP去推展fun_A,但是ESP一会还要回来,得有人放哨,所以...

在fun_A中EBP压栈并被保护,在fun_A入口位置等待

ESP推展fun_A的生长过程,直到运算做完,开始fun_A收尾工作

通用寄存器纷纷弹出栈

ESP指向EBP,回到入口处,

EBP弹出,ESP继续执行上一级调用函数,推进栈生长,直到结束


栈由高地址向低地址生长(栈底到栈顶)

堆由低地址向高地址生长,由于匿名,只能使用指针调用。

这也是EBP叫扩展基址指针寄存器的原因,有个误区说EBP永远指向栈底,这是不对的,因为:

ESP和EBP都是活动的,(ESP用于拓展),所谓的指向栈底只有相对每一个独立的方法来说才成立。

ESP用于生长,EBP用于固定位置,两者的关系和蚯蚓爬路一样(是啊,为什么我会想到如此恶心的比喻)

ESP是头,EBP是每次的支点 ,一步一步挪

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读