2016-05-29 85 views
0

在调用堆栈中,我们有一个帧指针,它给出了过程参数的位置以及指向前一帧的指针的地址。我们也有回信地址。为什么它需要返回地址?难道我们不能只是按照帧指针备份堆栈,在我们去的时候弹出堆栈帧吗?返回地址只是一个优化?为什么我们需要一个返回地址?

+0

返回地址包含要返回的指令的地址。它没有以其他方式存储在别处。 – Jester

+0

帧指针通常是以前的堆栈指针。返回地址是前一个指令指针。 –

+0

框架是可选的,框架指针是可选的,返回地址不是可选的。在处理器内部也进行了大量优化以改善分支预测。 –

回答

2

返回地址不指向前一个堆栈帧,它指向调用方法中下一条指令的代码段。

+0

“进入代码段” - >这是什么提醒我睡眠不足的大脑,我是多么愚蠢。谢谢! –

0

帧指向参数和局部变量的存储空间。你可以把它放在原来的状态,但是这不会恢复指令指针,当调用一个函数时,它的旧值会丢失。

返回地址就是那个保存的指令指针。

1

返回地址是指代码段或指令的函数调用已经创建堆栈的地址。它是非常重要的数据根据​​漏洞,在缓冲区溢出的情况下,攻击者得到地址空间可能导致危及状态