可變堆棧大小
回答
這可能意味着在一個實例中堆棧恰好流入其他分配的塊,而在另一個實例中,它會在未分配的地址空間上跳轉。
我一開始也這麼想過,但我一直在試圖看看/ proc/
你的意思是說,如果默認堆棧大小爲8192k,那麼在超過此限制之後,分段故障會發生很多? 您能否發佈說明以檢查此行爲? – agori 2010-07-29 10:44:31
我只是有一個循環捕獲/ proc/
ASLR代表「地址空間佈局隨機化」。它所做的是在每次運行時更改不同的段/段起始地址,是的,這包括堆棧。
這不是一個bug;這是設計。它的目的部分是讓溢出緩衝區難以獲得訪問權限,因爲爲了執行任意代碼,您需要誘使CPU「返回」到堆棧中某個點或運行時庫中。合法的代碼會知道要返回的位置,但是某些罐頭式利用不會 - 每次都可能是不同的地址。至於爲什麼表觀堆棧大小發生變化,堆棧空間是以頁面分配的,而不是以字節分配的。調整堆棧指針,特別是如果它不是頁面大小的倍數,則會改變您看到的可用空間量。
您確定ASLR可以更改段/段大小嗎?你有這方面的參考嗎? – agori 2010-07-29 09:58:14
除了這是它的整個生活目的(因此名稱),請參閱http://en.wikipedia.org/wiki/Address_space_layout_randomization或http://netsecurity.about.com/od/quicktips/qt/whatisaslr.htm一些更多的信息。 – cHao 2010-07-29 10:02:56
ASLR肯定會更改地址,但我看不到任何有關更改堆棧大小的文檔。 – agori 2010-07-29 10:05:47
- 1. Android堆棧大小
- 2. Linux堆棧大小
- 3. 堆棧= java.lang.StackOverflowError的:堆棧大小8MB
- 4. 增加AsyncTask堆棧大小?
- 5. LINQ堆棧大小問題
- 6. Android後退堆棧大小
- 7. 增加堆棧大小c#
- 8. 增加堆棧大小
- 9. 遞歸堆棧大小?
- 10. 遞歸堆棧大小
- 11. LuaJit增加堆棧/堆大小
- 12. android renderscript堆棧大小太小
- 13. 達到的最大堆棧大小
- 14. 最大線程堆棧大小.NET?
- 15. 如何找到最大堆棧大小?
- 16. 是否可以刪除最大調用堆棧大小?
- 17. iphone os支持的最大堆大小和堆棧大小是多少?
- 18. 遞歸 - 調用堆棧失敗測試的最大堆棧大小
- 19. 在Windows上增加堆棧大小(GCC)
- 20. Keil RTX RTOS線程堆棧大小
- 21. 設置SBT的堆棧大小
- 22. 配置FreeRTOS ISR堆棧大小
- 23. Unix中的堆棧大小pthread_create
- 24. 異常java.lang.StackOverflowError:堆棧大小8MB
- 25. 在JavaScript中調用堆棧大小
- 26. 堆棧的大小和值類型
- 27. 瞭解事件堆棧大小
- 28. 配置boost ::線程堆棧大小
- 29. 在C中檢查堆棧大小#
- 30. 如何用runhaskell增加堆棧大小?
令人驚訝的是,編譯器並沒有將該函數優化爲簡單的無限循環。 – caf 2010-07-29 13:46:51