toge's diary

コンピュータ関連の趣味をつらつらと。

[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に取り込まれて欲しい。