[GCC][C++]ProPoliceのおためし
gcc 3.4.1を落としてきて早速遊んでみます。
日頃の癖でjavaまでコンパイルしてしまってやたら時間がかかってしまった。
まずはちゃんと検出出来るかについて。
昨日使ったスタック上の配列にアクセスするソースをコンパイルして実行してみます。
$ /usr/local/pp/bin/g++ tailrecurse.cpp -O3 -march=athlon-xp -fstack-protector
$ ./a.out
....
あれれ、ちゃんと実行されちゃいましたよ。なんで?と思ったら
compiler option -fstack-protector-all, -fno-stack-protector-all enables and disables the protection of every function, not only the function with character array.
と書いてありますね。昨日のプログラムは引数に配列を取っていないのでスルーされてしまったようだ。
気を取りなおして再度実行。
$ /usr/local/pp/bin/g++ tailrecurse.cpp -O3 -march=athlon-xp -fstack-protector-all
$ ./a.out
....
a.out: stack smashing attack in function int main()
見事検出してくれました。さすがに何行目なのかは分からないけれど。
次は速度です。例によって末尾再帰をぐるぐる回してみます。
- 6.54 sec g++ 3.4.1 -O3 -march=athlon-xp -fstack-protector-all
- 6.74 sec g++ 3.4.1 -O3 -march=athlon-xp -fstack-protector
- 6.74 sec g++ 3.4.1 -O3 -march=athlon-xp -fno-stack-protector
ついでに配列に直したプログラムでもやってみます。
- 0.96 sec g++ 3.4.1 -O3 -march=athlon-xp -fstack-protector-all
- 0.96 sec g++ 3.4.1 -O3 -march=athlon-xp -fstack-protector
- 0.96 sec g++ 3.4.1 -O3 -march=athlon-xp -fno-stack-protector
うーん、素晴しいのではないでしょうか。全くといっていいほど速度差が出ません。
これは使えるなぁ。早くmainlineに取り込まれて欲しい。