2011-06-03 87 views
1

在向下增長的堆棧中,向上寫入堆棧變量的基本原理是什麼?例如,如果我有char buf [200],比如在內存地址0x400。當我寫入這個數組時,我將從0x400寫入到0x600,這是朝向先前的堆棧幀。這使得程序容易受到緩衝區溢出的影響,這些緩衝區溢出可以通過覆蓋返回指針等來控制程序。那麼,爲什麼不把數組從0x600寫到0x400呢?堆棧方向和緩衝區溢出

回答

2

沒關係;當您嘗試寫入超過200個字節時,仍然嘗試寫入不屬於該數組的地址(超出範圍),從而導致緩衝區溢出。

+0

我編輯了我的問題。當你寫下來時,你不能覆蓋返回地址,所以攻擊者難以控制? – extraeee 2011-06-03 22:12:27

+0

雖然你不能覆蓋當前棧自己的返回地址,但你仍然不能對與數組相鄰的東西進行任何假設 - 它可能是一個函數指針,它可能是一個子例程的另一個棧幀,你的函數是呼叫。例如,考慮'memset(&buf,300,0);'。 – spacehunt 2011-06-03 22:30:28