/GUARD
(ガード チェックを有効にする)
実行可能イメージで Control Flow Guard チェックをサポートするかどうかをリンカーに指示します。
構文
/GUARD:CF
/GUARD:NO
解説
/GUARD:CF
リンカー オプションは、DLL または EXE ファイルのヘッダーを変更して、制御フロー ガード (CFG) ランタイム チェックのサポートを示します。 また、リンカーは、必要な制御フローのターゲット アドレス データをヘッダーに追加します。 既定では、 /GUARD:CF
は無効になっています。 /GUARD:NO
を使用して明示的に無効にすることができます。 有効にするには、/GUARD:CF
には、既定でオンになっているリンカー オプション/DYNAMICBASE
(アドレス空間レイアウトのランダム化を使用する) も必要です。
/guard:cf
コンパイラ オプションを使用してソース コードをコンパイルすると、コンパイラは、可能なターゲット アドレスのすべての間接呼び出しを調べることで制御フローを分析します。 コンパイラは、間接呼び出し命令のターゲット アドレスが、実行時に既知のターゲット アドレスの一覧にあることを検証するコードを挿入します。 CFG をサポートするオペレーティング システムは、CFG のランタイム チェックに失敗したプログラムを停止します。 このチェックにより、データの破損を使用して呼び出し先を変更することで、攻撃者が悪意のあるコードを実行することがより困難になります。
CFG 対応の実行可能イメージを作成するには、コンパイラとリンカーの両方に /GUARD:CF
オプションを指定する必要があります。 /GUARD:CF
を使用してコンパイルされたがリンクされていないコードでは、ランタイム チェックのコストが発生しますが、CFG 保護は有効になりません。 /guard:cf
オプションを cl
コマンドに指定してコンパイルし、1 つのステップでリンクすると、コンパイラはフラグをリンカーに渡します。 Visual Studio で Control Flow Guard プロパティが設定されている場合、 /GUARD:CF
オプションはコンパイラとリンカーの両方に渡されます。 オブジェクトのファイルまたはライブラリが個別にコンパイルされた場合、オプションは link
コマンドで明示的に指定する必要があります。
このリンカー オプションを Visual Studio で設定するには
プロジェクトの [プロパティ ページ] ダイアログ ボックスを開きます。 詳しくは、「コンパイラとビルドのプロパティを設定する」をご覧ください。
[構成プロパティ]>[リンカー]>[コマンド ライン] プロパティ ページを選択します。
[追加のオプション] で、
/GUARD:CF
を入力します。 [OK] または [適用] を選択して、変更内容を保存します。
このリンカーをコードから設定するには
- 以下を参照してください。AdditionalOptions