雖然實際的實現是平臺特定的,但這個想法是潛在的危險緩衝區溢出的原因。例如,有沒有理由爲什麼內存中的數組'往往'下來,而功能堆棧通常'去'?
-------------
| arr[0] | \
------------- \
| arr[1] | -> arr[3] is local to a function
-------------/
| arr[2] |/
-------------
| frame ptr |
-------------
| ret val |
-------------
| ret addr |
-------------
| args |
-------------
我的問題是,是否有一個原因,當地的陣列,因爲沒有更好的動詞,流下來了嗎?相反,如果數組流向上,它是否不會顯着減少覆蓋返回地址的緩衝區溢出錯誤的數量?
通過使用線程,可以覆蓋當前函數調用的函數的返回地址。但現在讓我們忽略它。
這個答案是最好的。您可以在這裏瞭解更多關於內存佈局的信息:http://dirac.org/linux/gdb/02a-Memory_Layout_And_The_Stack.php堆棧和堆堆棧的方向相反,以充分利用未使用的內存地址空間。 –