一.動態記憶體分配是乙個很容易出現程式漏洞的領域,且一旦出錯不易查詢.這些錯誤通常由兩種原因引起:
1.指標malloc()分配的記憶體的指標值發生變化,又沒有別的指標指向它,那麼這塊內存在程式退出將變得無法訪問.
2.在乙個已分配的記憶體塊前或後寫資料,很可能會損壞malloc函式庫用於記錄分配情況的資料結構.出現這種情況後,過一段時間後,再呼叫malloc或free都可能失敗而引起程式崩潰,要找這類錯誤的發生地點和準確時間是困難的,因為錯誤的發生是在很久以前.
有很多任務具可以幫助發現這些錯誤,例如electricfence和valgrind
二.1.electricfence
下面的程式efnece.c呼叫malloc分配了1024位元組的記憶體,程式試圖寫這塊記憶體後的第乙個位元組
/*efence_test.c*/
#include
int main()
gcc編譯執行後沒有發現任何異常,但malloc所分配的記憶體可能已被破壞,我們遲早會遇到麻煩
安裝electricfence後,就可以在編譯時加入efence庫
gcc -g -o efence_test efence_test.c -lefence
2.valgrind
valgrind工具能檢測到前面所說的錯誤,還能檢測到陣列越界錯誤,這個軟體也不是linux自帶的,需要到上找到.(ubuntu系統也可以通過synaptic package manager軟體安裝)
使用valgrind工具不需要重新編譯,它還可以用來除錯乙個正在執行的程式
/*checher.c*/
#include
int main()
編譯好checher後,直接用命令valgrind --leak-check=yes -v ./checker
兩個記憶體除錯工具
一.動態記憶體分配是乙個很容易出現程式漏洞的領域,且一旦出錯不易查詢.這些錯誤通常由兩種原因引起 1.指標malloc 分配的記憶體的指標值發生變化,又沒有別的指標指向它,那麼這塊內存在程式退出將變得無法訪問.2.在乙個已分配的記憶體塊前或後寫資料,很可能會損壞malloc函式庫用於記錄分配情況的資...
兩個記憶體除錯工具
一.動態記憶體分配是乙個很容易出現程式漏洞的領域,且一旦出錯不易查詢.這些錯誤通常由兩種原因引起 1.指標malloc 分配的記憶體的指標值發生變化,又沒有別的指標指向它,那麼這塊內存在程式退出將變得無法訪問.2.在乙個已分配的記憶體塊前或後寫資料,很可能會損壞malloc函式庫用於記錄分配情況的資...
Linux記憶體除錯工具 Valgrind使用方法
一.valgrind是什麼?valgrind是乙個提供程式除錯及效能分析的工具集。其包含的工具主要有memcheck,cachegrind,callgrind,massif等。其中,最為常用的是memcheck,其主要用來檢查程式heap上的記憶體使用情況。本文件主要介紹memcheck的用法和一些...