可變堆棧大小
回答
這可能意味着在一個實例中堆棧恰好流入其他分配的塊,而在另一個實例中,它會在未分配的地址空間上跳轉。
我一開始也這麼想過,但我一直在試圖看看/ 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. Linux堆棧大小
- 2. Android堆棧大小
- 3. 堆棧= java.lang.StackOverflowError的:堆棧大小8MB
- 4. Tomcat7堆棧大小很小
- 5. FreeRTOS STM32鏈接器堆棧大小vs任務堆棧大小
- 6. 遞歸堆棧大小?
- 7. 固定大小堆棧Java
- 8. LINQ堆棧大小問題
- 9. 調用堆棧大小?
- 10. 增加堆棧大小c#
- 11. 增加AsyncTask堆棧大小?
- 12. 增加堆棧大小
- 13. java.lang.StackOverflowError:堆棧大小8MB
- 14. 遞歸堆棧大小
- 15. LuaJit增加堆棧/堆大小
- 16. 堆棧或堆?哪一個可以選擇已知大小的變量?
- 17. android renderscript堆棧大小太小
- 18. 最大堆棧大小使用
- 19. 最大調用堆棧大小
- 20. 如何找到最大堆棧大小?
- 21. java集最大堆棧大小
- 22. 最大堆棧大小超過
- 23. 最大線程堆棧大小.NET?
- 24. 達到的最大堆棧大小
- 25. 增加堆棧保留大小不會防止堆棧溢出
- 26. 是否可以刪除最大調用堆棧大小?
- 27. Hotspot JVM的「Xss」選項是否將固定的「初始堆棧大小」或堆棧可以增長到的「最大堆棧大小」設置爲?
- 28. iphone os支持的最大堆大小和堆棧大小是多少?
- 29. 遞歸 - 調用堆棧失敗測試的最大堆棧大小
- 30. 如何在Java/Groovy的聲明堆棧大小(確認錯誤:堆棧太大)
令人驚訝的是,編譯器並沒有將該函數優化爲簡單的無限循環。 – caf 2010-07-29 13:46:51