【问题标题】:Why do we need a return address?为什么我们需要退货地址?
【发布时间】:2016-05-29 13:32:15
【问题描述】:

在调用堆栈上,我们有一个帧指针,它为我们提供了过程参数的位置以及指向前一帧的指针的地址。我们也有一个退货地址。为什么它需要返回地址?难道我们不能仅仅跟随帧指针返回堆栈,同时弹出堆栈帧吗?退货地址只是优化吗?

【问题讨论】:

  • 返回地址包含要返回的指令的地址。它不会以其他方式存储在其他任何地方。
  • 帧指针一般是前面的栈指针。返回地址为前一条指令指针。
  • 帧是可选的,帧指针是可选的,返回地址不是可选的。还在处理器内部进行了大量优化,以改进分支预测。

标签: assembly stack


【解决方案1】:

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

【讨论】:

  • “进入代码段” -> 这让我的睡眠不足的大脑想起了我是多么愚蠢。谢谢!
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2021-05-23
      • 1970-01-01
      • 1970-01-01
      • 2019-06-09
      • 1970-01-01
      • 2012-07-20
      • 1970-01-01
      • 2014-06-18
      • 2017-02-26
      相关资源
      最近更新 更多