2009-08-05 132 views
0

Windows 7具有堆隨機化堆棧隨機化功能。我怎麼能管理它?它們如何影響我的應用程序的性能?哪裏可以找到更多關於它如何工作的信息?Windows中的堆隨機化

我正在使用Visual Studio 2008開發C++程序。我找不到該功能的任何編譯器選項。

回答

2

好,堆隨機化和堆棧隨機的Windows功能,但必須在鏈接時每個進程顯式啓用。馬克Russinovich描述了他的5-th Windows Internals書是如何工作的。

堆棧隨機化包括首先選擇由64 KB或256 KB分隔的32個可能的堆棧位置之一。此基址是通過查找第一適當自由存儲器區域,然後選擇X個可用區域,在那裏X再次基於當前處理器的TSC產生移位和屏蔽到一個5位的值來選擇。 < ...>

最後,在用戶模式下創建時,ASLR隨機化初始過程堆(以及後續堆)的位置。函數使用另一個僞隨機的TSC派生值來確定堆的基地址。此值爲5位,這次乘以64 KB,以生成最終的基地址,從0開始,爲初始堆提供0x00000000至0x001F0000的可能範圍。另外,如果攻擊是對整個可能的堆地址範圍進行暴力掃描,則會手動釋放堆基地址之前的範圍以強制訪問衝突。

0

當然,它只是一個操作系統功能?它不應該絲毫打擾你。操作系統會移動你的應用程序,只要你不假定你的應用程序被加載到一個特定的內存地址(你真的不應該承擔),你不會有任何問題。

+0

我的問題是不是地址隨機,而是堆隨機化。我可以在程序生命的任何時候創建新的堆。隨機化可能是一個沉重的過程。我想確保它不會沒有我的贊同就會發生。 – 2009-08-05 09:31:21