在调用堆栈中,我们有一个帧指针,它给出了过程参数的位置以及指向前一帧的指针的地址。我们也有回信地址。为什么它需要返回地址?难道我们不能只是按照帧指针备份堆栈,在我们去的时候弹出堆栈帧吗?返回地址只是一个优化?为什么我们需要一个返回地址?
0
A
回答
2
返回地址不指向前一个堆栈帧,它指向调用方法中下一条指令的代码段。
+0
“进入代码段” - >这是什么提醒我睡眠不足的大脑,我是多么愚蠢。谢谢! –
0
帧指向参数和局部变量的存储空间。你可以把它放在原来的状态,但是这不会恢复指令指针,当调用一个函数时,它的旧值会丢失。
返回地址就是那个保存的指令指针。
1
返回地址是指代码段或指令的函数调用已经创建堆栈的地址。它是非常重要的数据根据漏洞,在缓冲区溢出的情况下,攻击者得到地址空间可能导致危及状态
相关问题
- 1. 为什么我们需要设置发布地址[network.host]的值
- 2. 为什么我们需要在hdfs-site.xml中设置rpc地址
- 3. 为什么sin6_family需要IPv6地址?
- 4. 我们为什么要使用`realloc`如果我们需要一个'TMP buffer`
- 5. 为什么malloc(0)在Windows中返回一个非空地址?
- 6. Ansible返回值 - 需要IP地址
- 7. 为什么我们需要fieldset标签?
- 8. 为什么我们需要RIA?
- 9. 为什么我们需要.htaccess的worpdress?
- 10. 为什么我们需要9补丁?
- 11. 为什么我们需要在JavaScript
- 12. 我们为什么需要纤维
- 13. 为什么我们需要BeginGetResponse和BeginRead?
- 14. 为什么我们需要TensorFlow tf.Graph?
- 15. 为什么我们需要Bower和Nuget?
- 16. 为什么我们需要ng-click?
- 17. 为什么我们需要`ngDoCheck`
- 18. 为什么我们需要设置SONAR_RUNNER_OPTS?
- 19. 为什么我们需要Anaconda 2.7?
- 20. 为什么我们需要mktemp?
- 21. 为什么我们需要ClassMethods和InstanceMethods?
- 22. 为什么我们需要ioc容器
- 23. 为什么我们需要RBAC许可?
- 24. 为什么我们需要scalaz.stream迭代?
- 25. 为什么我们需要Buffer.isBuffer方法?
- 26. 为什么我们需要WCF
- 27. 为什么我们需要addRequestHeader方法?
- 28. 为什么我们需要编写log.isDebugEnabled?
- 29. 需要什么('express')()返回?
- 30. 为什么我们需要ARP请求中的发件人MAC地址?
返回地址包含要返回的指令的地址。它没有以其他方式存储在别处。 – Jester
帧指针通常是以前的堆栈指针。返回地址是前一个指令指针。 –
框架是可选的,框架指针是可选的,返回地址不是可选的。在处理器内部也进行了大量优化以改善分支预测。 –