gccのバージョンによるスタック領域破壊の挙動の違い

#include 
int main(){
  int c[4];
  c[4] = 0;
  return 0;
}

このsample.cppを

$ g++ -g sample.cpp -o sample
$ ./sample

とソースでインストールしたg++4.4.3でビルドすると領域破壊を検出しないのに、

$ /usr/bin/g++ -g sample.cpp -o sample
$ ./sample
セグメンテーション違反です

CentOS標準のg++4.1.2でビルドすると、セグメンテーション違反を検出する。
バージョン低い方が高性能ってどういうこと・・・。
ビルドオプションが何か足りないのだろうか・・・・。


ちなみに余談だが、上記のコードはValgrind、ElectricFenceのどちらにおいてもエラーを検出できない。
Valgrindは動的領域のチェックのみで、静的領域、スタック領域の領域破壊に対応していないが、ElectricFenceも同じようだ。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です