在調用堆棧中,我們有一個幀指針,它給出了過程參數的位置以及指向前一幀的指針的地址。我們也有回信地址。爲什麼它需要返回地址?難道我們不能只是按照幀指針備份堆棧,在我們去的時候彈出堆棧幀嗎?返回地址只是一個優化?爲什麼我們需要一個返回地址?
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
幀指針通常是以前的堆棧指針。返回地址是前一個指令指針。 –
框架是可選的,框架指針是可選的,返回地址不是可選的。在處理器內部也進行了大量優化以改善分支預測。 –