我想分配一個數組並設置它,使得內存管理單元保護它之前和之後的頁面,所以嘗試運行數組邊界將會嘗試被自動抓住;然後抓住它以便以受控的方式處理錯誤。設置一個邊界保護數組
我懷疑會有一個可移植的解決方案,但是分別在Windows和GCC上分別使用Microsoft C和Linux的最佳平臺特定方法是什麼?
我想分配一個數組並設置它,使得內存管理單元保護它之前和之後的頁面,所以嘗試運行數組邊界將會嘗試被自動抓住;然後抓住它以便以受控的方式處理錯誤。設置一個邊界保護數組
我懷疑會有一個可移植的解決方案,但是分別在Windows和GCC上分別使用Microsoft C和Linux的最佳平臺特定方法是什麼?
實際上,有一種便攜的方式來檢測軟件中的內存分配超限。 Dmalloc提供柵欄柱重寫檢測
柵欄柱存儲器是區域緊接的上方或下方存儲器 分配。編寫代碼在分配下方訪問以上或 非常容易 - 特別是在處理數組或字符串時。 該庫可以在每個 分配周圍的區域中寫入特殊值,以便它會在這些區域被覆蓋時注意到。
對,謝謝,這看起來像一個很好的便攜式解決方案用於調試目的?但是,我在尋找的是確定性的東西,我可以用它從解釋器的內部循環中取出一些明確的檢查。 – rwallace
還有http://valgrind.org/ –
您也可以爲您的目的擴展或自定義GCC編譯器(使用插件或MELT擴展)。 http://gcc-melt.org/可能是一個相關的工具來做到這一點。 –
有(http://blogs.msdn.com/b/oldnewthing/archive/2012/02/10/10266256 [實際用來做這樣的事情Windows API函數。 aspx),儘管Windows Vista中的行爲已被刪除,因爲人們不斷將其報告爲安全漏洞,即使它不是。 –
內存管理單元以頁面粒度工作,您可以分配未在頁邊界上終止的數組 - 在這種情況下,將無法檢測到數組末尾與頁邊界之間對內存的無效訪問。 – smichak
啊,它看起來像該功能使用的機制仍然可用,但?這看起來像Windows的解決方案。 - 是的,我想我需要確保在頁面邊界上分配有問題的數組。 – rwallace