/GS
読み:スラッシュ-ジーエス
外語:/GS
Visual Studioのコンパイラーオプションの一つ。バッファーのセキュリティチェック。紛らわしいものに「/Gs」があるが、別のものであるので注意。
概要
関数のリターンアドレス、例外ハンドラーのアドレス、特定の型のパラメーターを上書きするような、様々なバッファーオーバーフローを検出するコードの挿入を有効にするオプションである。
現在のVisual Studioは標準で有効になっており、無効にするためには、/GS- オプションを付ける必要がある。
特徴
バッファーオーバーフローの実行時検知の機能である。
関数を呼び出す際、スタックのリターンアドレスとローカル変数の間に「stack cookie」という乱数を積んでおく。
関数から帰る直前にstack cookieをチェックし、もしstack cookieが異なっていた場合はプロセスを強制終了させる。
stack cookieがリターンアドレスとローカル変数の間にあるため、万一ローカル変数書き換え時にバッファーオーバーフローが発生した場合、リターンアドレスが書き換えられる前にstack cookieが書き換えられることになる。これを利用して、バッファーオーバーフローの有無を簡易的にチェックすることができる。
関数呼び出し時に逐一チェックが入るため、その分パフォーマンスが落ちるという問題がある。
再検索