C 語言的記憶體漏洞檢查
高等 C 語言簡介字串指標與陣列函數結構物件導向記憶體檔案錯誤處理巨集處理C 與組合語言資料結構動態字串動態陣列鏈結串列雜湊表開發環境MakeCygwinMinGWDevC++wxDevC++編譯器gcc 編譯器TinyCC 編譯器LCC 編譯器應用主題CGI 程式GNU 程式視窗程式影像處理練習題訊息相關網站參考文獻最新修改簡體版English |
在 C 語言中,如果有人用 malloc() 等函數分配了記憶體,卻忘了用 free() 等函數進行釋放,那就會產生記憶體漏洞。要解決這個問題,必須遵循幾個原則,第一個是程式紀律的問題,例如一個很好的習慣是,採用物件導向的寫法,然後在物件的建構函數中分配記憶體,並在解構函數中,釋放該物件所分配的所有記憶體。 第二個原則是程式測試的問題,您可以使用記憶體檢查函數,進行記憶體漏洞檢查,像是 Linux 當中就有 mtrace 這樣的套件可以使用,您只要引用 <mcheck.h> 這個標頭檔即可,以下是一個使用 mtrace 進行記憶體檢查的範例。 mtrace 的使用 (Linux)檔案:leak.c #include <stdlib.h> #include <mcheck.h> // mtrace 的標頭檔 int main() { int *a; mtrace(); // 啟用 mtrace a = malloc(sizeof(int)); 分配記憶體 *a = 7; // 忘了釋放 return EXIT_SUCCESS; } 執行方法:
簡單的檢查方法假如您沒有辦法使用像 mtrace 這種由系統所提供的記憶體檢查方法,也可以自己製作一個很簡單的版本。為了示範這種作法,我們設計了 new(), del() 與 mcheck() 等三個巨集,以示範這種簡單的漏洞檢查法。 程式範例:mcheck.c
執行結果:
有了這樣的函數,您就可以知道是否有記憶體漏洞的存在了,雖然不像 mtrace 那樣可以直接告訴您產生漏洞的程式位置,但至少可以讓您檢查是否存在記憶體漏洞。 來自 jserv 的建議
參考文獻
|
page revision: 4, last edited: 05 Mar 2016 03:15
Post preview:
Close preview