ほとんどのプログラマーは、コンパイラがどのようにして人間が読めるコードを、マシンが実行できるマシン・コードに変換するのか、大まかにしか知らないのが普通です。コンパイルの過程で、コンパイラはコードを最適化し、効率的に実行できるようにします。時には、コンパイラは最適化を行いすぎて、削除すべきでないコードまで削除してしまい、より壊れやすいアプリ ケーションになってしまうことがあります。
マサチューセッツ工科大学(MIT)の人工知能・コンピュータサイエンス研究所の4人の研究者が、不安定な最適化コード、つまり未定義の動作を含むコードがコンパイラによって削除される問題について調査しました。いわゆる未定義の動作には、ゼロによる除算、ヌル・ポインタ、間接参照、バッファ・オーバーフローなどが含まれます。場合によっては、コンパイラによって未定義の動作が完全に除去されることで、プログラムにセキュリティ上の弱点が生じる可能性があります。
研究者らは、不安定なC/C++コードを特定するための静的チェッカーであるSTACKを開発し、テストしたシステム上で数百の新しいバグを発見しました。 STACKは、Debian Wheezyリポジトリをスキャンし、C/C++コードを含む8575個のパッケージをスキャンしました。C/C++ コードを含むパッケージのうち、3,471 個に少なくとも 1 つの不安定なコードが含まれていることがわかりました。研究者は、これは非常に一般的な問題であると考えています。





