/GUARD (ガード チェックを有効にする)

実行可能イメージで Control Flow Guard チェックをサポートするかどうかをリンカーに指示します。

構文

/GUARD:CF
/GUARD:NO

解説

リンカー オプションは/GUARD:CF、DLL または EXE ファイルのヘッダーを変更して、Control Flow Guard (CFG) ランタイム チェックのサポートを示します。 また、リンカーは、必要な制御フローのターゲット アドレス データをヘッダーに追加します。 既定では、 /GUARD:CF 無効になっています。 を使用 /GUARD:NOして明示的に無効にすることができます。 有効にするには、/GUARD:CF既定でオンになっている (アドレス空間レイアウトのランダム化を使用する) リンカー オプションも必要/DYNAMICBASEです。

コンパイラ オプションを使用してソース コードを /guard:cf コンパイルすると、コンパイラは、可能なターゲット アドレスのすべての間接呼び出しを調べることで制御フローを分析します。 コンパイラは、間接呼び出し命令のターゲット アドレスが、実行時に既知のターゲット アドレスの一覧にあることを検証するコードを挿入します。 CFG をサポートするオペレーティング システムは、CFG のランタイム チェックに失敗したプログラムを停止します。 このチェックにより、攻撃者がデータの破損を使用して呼び出し先を変更することで、悪意のあるコードを実行することが困難になります。

/GUARD:CF CFG 対応の実行可能イメージを作成するには、コンパイラとリンカーの両方にオプションを指定する必要があります。 コードはコンパイルされますが、使用/GUARD:CFしてリンクされていない場合、ランタイム チェックのコストが発生しますが、CFG 保護は有効になりません。 /guard:cf 1 つのステップでコンパイルしてリンクするclオプションをコマンドに指定すると、コンパイラはフラグをリンカーに渡します。 Visual Studio で Control Flow Guard プロパティが設定されている場合、/GUARD:CFこのオプションはコンパイラとリンカーの両方に渡されます。 オブジェクトのファイルまたはライブラリが個別にコンパイルされた場合、オプションは link コマンドで明示的に指定する必要があります。

このリンカー オプションを Visual Studio で設定するには

  1. プロジェクトの [プロパティ ページ] ダイアログ ボックスを開きます。 詳しくは、「コンパイラとビルドのプロパティを設定する」をご覧ください。

  2. [構成プロパティ]>[リンカー]>[コマンド ライン] プロパティ ページを選択します。

  3. [追加のオプション] で、/GUARD:CF を入力します。 [OK] または [適用] を選択して、変更内容を保存します。

このリンカーをコードから設定するには

関連項目

/guard (制御フロー ガードを有効にする)
MSVC リンカーのリファレンス
MSVC リンカー オプション