2016-05-29 89 views
0

在調用堆棧中,我們有一個幀指針,它給出了過程參數的位置以及指向前一幀的指針的地址。我們也有回信地址。爲什麼它需要返回地址?難道我們不能只是按照幀指針備份堆棧,在我們去的時候彈出堆棧幀嗎?返回地址只是一個優化?爲什麼我們需要一個返回地址?

+0

返回地址包含要返回的指令的地址。它沒有以其他方式存儲在別處。 – Jester

+0

幀指針通常是以前的堆棧指針。返回地址是前一個指令指針。 –

+0

框架是可選的,框架指針是可選的,返回地址不是可選的。在處理器內部也進行了大量優化以改善分支預測。 –

回答

2

返回地址不指向前一個堆棧幀,它指向調用方法中下一條指令的代碼段。

+0

「進入代碼段」 - >這是什麼提醒我睡眠不足的大腦,我是多麼愚蠢。謝謝! –

0

幀指向參數和局部變量的存儲空間。你可以把它放在原來的狀態,但是這不會恢復指令指針,當調用一個函數時,它的舊值會丟失。

返回地址就是那個保存的指令指針。

1

返回地址是指代碼段或指令的函數調用已經創建堆棧的地址。它是非常重要的數據根據​​漏洞,在緩衝區溢出的情況下,攻擊者得到地址空間可能導致危及狀態

相關問題