作業中のプロジェクトをコンパイルするときに警告を有効にし-Wstack-protectorました(商用マルチプラットフォームC ++ゲームエンジン、Mac OS X10.6とGCC4.2でコンパイル)。-fstack-protectorこのフラグは、有効になっている場合でもスタックスマッシングから保護されない関数について警告します。GCCは、プロジェクトのビルド時にいくつかの警告を発します。
関数を保護しない:少なくとも8バイトの長さの
バッファーがないローカル変数を保護しない:可変長バッファー
最初の警告として、関数で使用するときにバッファが持つ必要のある最小サイズを調整できることがわかりました。この関数をスタックスマッシングから保護するには、次の--param ssp-buffer-size=Xように使用できます。Xはデフォルトで8であり、次のようになります。 1と低い。
2番目の警告では、の使用を停止しない限り、その発生を抑制することはできません-Wstack-protector。
- いつ
-fstack-protector使用する必要がありますか?(たとえば、開発中は常に、またはバグを追跡するときなど) - いつ
-fstack-protector-all使用する必要がありますか? - 何を
-Wstack-protector言っているの?バッファの最小サイズを減らすことを提案していますか? - もしそうなら、サイズを1にすることのデメリットはありますか?
-Wstack-protector警告のないビルドが必要な場合は、常に有効にしたい種類のフラグではないようです。これは正しいですか?