2020-11-19(栈帧)
发布日期:2021-05-07 12:06:11 浏览次数:23 分类:技术文章

本文共 317 字,大约阅读时间需要 1 分钟。

今天看到几句比较经典语句:

每个函数自己的这片区域称为帧,由于这些帧都在栈上,所以又被称为栈帧。栈的内存区域不一定固定,而且随着每次调用的路径不同,栈帧的位置也会不同。所以引入一个寄存器来专门存储当前栈帧的位置,即ebp,称为帧指针。

push ebp

mov ebp,esp
可以看出,ebp在初始化后实际上执行的是父栈帧地址的存储位置,因此*ebp形成了一个链表,代表一层层函数的调用链。

编译器也可以通过跟踪每个计算指令执行时栈的位置,从而直接越过ebp,而使用栈指针esp来引用局部变量。这样就能节省每次保存ebp时所需要的时间,且增加了一个通用寄存器

因此现在有两种函数:一是有帧指针的函数,二是经过优化后没有帧指针的函数。

上一篇:2020-11-20(页帧)
下一篇:2020-11-18(失败的一天)

发表评论

最新留言

感谢大佬
[***.8.128.20]2025年04月11日 17时48分05秒