为什么我们需要一个寄信人地址?

时间:2016-05-29 13:32:16

标签: assembly stack

在调用堆栈上,我们有一个帧指针,它给出了过程参数的位置和指向前一帧的指针的地址。我们还有一个寄信人地址。为什么返回地址是必要的?难道我们不能只跟随帧指针备份堆栈,在我们去的时候弹出堆栈帧吗?返回地址只是一种优化吗?

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:1)

返回地址是指代码段或其函数调用已创建堆栈的指令的地址。根据漏洞情况,这是非常重要的数据,因为在缓冲区溢出的情况下,攻击者获得的地址空间可能会导致状态泄露

答案 2 :(得分:0)

框架指向参数和局部变量的存储空间。您可以将其置于原始状态,但不会恢复指令指针,当调用函数时,其旧值将丢失。

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