- 追加された行はこの色です。
- 削除された行はこの色です。
#author("2018-06-09T17:19:35+00:00","","")
#author("2018-06-13T12:16:29+00:00","","")
#topicpath
//////////////////////////////////////////////////////////////////////////////
* 目次 [#d012f75f]
#contents();
//////////////////////////////////////////////////////////////////////////////
* -D_FORTIFY_SOURCE で検出する [#a8b72f7f]
- GCC の "Automatic Fortification" 機能を使って、バッファオーバーフローを起こしやすいとされている関数(gets, strcpy, memcpy など)の誤使用をコンパイル時・実行時に検出する
//============================================================================
** 使い方 [#pd1bf5d5]
- 下記のオプションを付加してコンパイルする:
-O1 以上
-D_FORTIFY_SOURCE=1
- これにより、次の2つのタイミングでバッファオーバーフローの検出が行われる:
|~チェックするタイミング |~チェック内容 |
|コンパイル時 |コンパイル時にチェック可能な明らかなバッファオーバーフロー |
|実行時 |上記以外のおバッファオーバー^フロー |
|実行時 |上記以外のバッファオーバーフロー |
- チェックの強化
-D_FORTIFY_SOURCE=1
を
-D_FORTIFY_SOURCE=2
にすると、より厳しくチェエクされるようになる。
-- 一例として、format-string bug がランタイムに検出されるようになる。
--- printf, vfprintf, syslog などの関数が "%n" を含むフォーマット文字列を引数に取って呼ばれると abort する。
//============================================================================
** チェックされる関数の一覧 [#v8699aa6]
- 下記コマンドで一覧を取得出来る:
$ grep -r "_chk" /usr/include/ | sed 's/.*\(__.*chk\).*/\1/' | sort | uniq