Top/Prog/debug/memory

目次

バッファオーバーフロー

-D_FORTIFY_SOURCE で検出する (GCC)

使い方

チェックされる関数の一覧

Mudflap (GCC)

使い方

  1. ビルド
  1. 実行
    • 出来上がったプログラムを通常通り実行する。Mudflap によりチェックが行われ、エラーメッセージは stderr に出力される。
    • 一時的気に Mudflap を無効にしたい場合は、環境変数 MUDFLAP_OPTIONS を変更する
      $ MUDFLAP_OPTIONS="-mode-nop" <target-test-program>

-fstack-protector オプションによるスタックオーバーフローの検出 (GCC)

AddressSanitizer でのバッファオーバーフローの検出 (clang)

メモリリーク

valgrind

使い方

  1. ビルドする
    • -g 又は --ggdb 付きにすること
    • 最適化は最大でも -O1 までにしておくこと
    • static link は避けること。これは、malloc などの関数を valgrind が置き換えられなくなる為。
  2. 下記コマンドで実行する
    $ valgrind --tool=memcheck --leak-check=yes <program-file-name>
    または
    $ valgrind --leak-check=full --leak-resolution=high --show-reachable=yes <program-file-name>

vgcore

特徴

valgrind で検出できないもの

mtrace

使い方

  1. ヘッダをインクルードする
    #include <mcheck.h>
  2. リークのテストを開始したい場所で mtrace() をコール
  3. 終了したい場所で muntrace() をコールする
  4. -g つきでコンパイル
  5. 環境変数 MALLOC_TRACE を export する
    # export MALLOC_TRACE=<log-file-name>
  6. プログラムを実行する
  1. 以下の環境変数を指定することでメモリ領域の破壊などについてはデバッグしやすくなるかもしれません。
    export MALLOC_CHECK_=”値”
    
    値は0〜3です。
    MALLOC_CHECK_ = 0 何もしない
    MALLOC_CHECK_ = 1 標準エラー出力に診断メッセージ表示
    MALLOC_CHECK_ = 2 abort
    MALLOC_CHECK_ = 3 1と2の両方 
    

特徴

参考リンク


トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2021-02-06 (土) 17:26:08