在调用堆栈中,我们有一个帧指针,它给出了过程参数的位置以及指向前一帧的指针的地址。我们也有回信地址。为什么它需要返回地址?难道我们不能只是按照帧指针备份堆栈,在我们去的时候弹出堆栈帧吗?返回地址只是一个优化?为什么我们需要一个返回地址?
0
A
回答
2
返回地址不指向前一个堆栈帧,它指向调用方法中下一条指令的代码段。
+0
“进入代码段” - >这是什么提醒我睡眠不足的大脑,我是多么愚蠢。谢谢! –
0
帧指向参数和局部变量的存储空间。你可以把它放在原来的状态,但是这不会恢复指令指针,当调用一个函数时,它的旧值会丢失。
返回地址就是那个保存的指令指针。
1
返回地址是指代码段或指令的函数调用已经创建堆栈的地址。它是非常重要的数据根据漏洞,在缓冲区溢出的情况下,攻击者得到地址空间可能导致危及状态
相关问题
- 1. 我们为什么要返回deferred.promise()
- 2. 为什么我们需要MAC地址来传输数据报?
- 3. 为什么我们需要在hdfs-site.xml中设置rpc地址
- 4. 为什么我们需要设置发布地址[network.host]的值
- 5. 为什么我们需要和打印IP地址
- 6. 什么是EJB回调,为什么我们需要它们?
- 7. 为什么我们在返回render()时需要“请求”对象?
- 8. 为什么我们不需要在“使用”范围之外返回一个值?
- 9. 为什么sin6_family需要IPv6地址?
- 10. 我们为什么要使用`realloc`如果我们需要一个'TMP buffer`
- 11. 为什么我们需要存储函数的返回地址来制定严格的答案
- 12. 为什么ioctl返回“坏地址”
- 13. DavLockDB:我们需要什么?
- 14. 为什么我们需要simple_one_for_one?
- 15. 为什么我们需要TensorFlow tf.Graph?
- 16. 为什么我们需要使用prompt.start()?
- 17. 为什么我们需要scalaz.stream迭代?
- 18. 为什么我们需要WCF
- 19. 为什么我们需要Anaconda 2.7?
- 20. 为什么我们需要编写log.isDebugEnabled?
- 21. 为什么我们需要ng-click?
- 22. 为什么我们需要Control.Lens.Reified?
- 23. 我们为什么需要纤维
- 24. 为什么我们需要org.junit.ComparisonFailure?
- 25. 为什么我们需要addRequestHeader方法?
- 26. 为什么我们需要时代?
- 27. 为什么我们需要ContinueWith方法?
- 28. 为什么我们需要Java NIO Selector?
- 29. 为什么我们需要使用ExitWindowsEx
返回地址包含要返回的指令的地址。它没有以其他方式存储在别处。 – Jester
帧指针通常是以前的堆栈指针。返回地址是前一个指令指针。 –
框架是可选的,框架指针是可选的,返回地址不是可选的。在处理器内部也进行了大量优化以改善分支预测。 –