まずはインストール(環境はCentOS5.5)
# yum -y install ElectricFence
サンプルコードsample1.cpp作成
#include int main(){ char *c; c = new char(4); c[4] = 0; return 0; }
まずは普通にビルドして実行。
$ g++ -Wall -g sample1.cpp -o sample1 $ ./sample1
領域破壊してるのに、なんもでねぇ・・・・。
次にElectricFenceを有効化してビルド。
$ g++ -Wall -g sample1.cpp -o sample1 -lefence $ ./sample1 Electric Fence 2.2.0 Copyright (C) 1987-1999 Bruce Perens セグメンテーション違反です (core dumped)
おおー!!見事に検知!
coreダンプも覗いてみる。
$ gdb sample1 core.10315 Core was generated by `./sample1'. Program terminated with signal 11, Segmentation fault. #0 0x0804854d in main () at sample1.cpp:5 5 c[4] = 0; (gdb)
バッファオーバーランした箇所がばっちり特定できます。
参考:http://blog.soi33.org/?p=224