兩個記憶體除錯工具

2021-06-25 19:51:01 字數 880 閱讀 1162

一.動態記憶體分配是乙個很容易出現程式漏洞的領域,且一旦出錯不易查詢.這些錯誤通常由兩種原因引起:

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的用法和一些...