次の方法で共有


/fsanitize-coverage (サニタイザー カバレッジの構成)

/fsanitize-coverage コンパイラ オプションは、ユーザー定義関数が呼び出されるさまざまな種類のインストルメンテーション ポイントを追加するようコンパイラに指示します。 これらのオプションは、/fsanitize=fuzzer を使用する OneFuzz などのファジー シナリオに役立ちます。 詳細については、OneFuzz のドキュメントOneFuzz GitHub プロジェクトに関するページをご覧ください。

構文

/fsanitize-coverage=edge
/fsanitize-coverage=inline-8bit-counters
/fsanitize-coverage=trace-cmp
/fsanitize-coverage=trace-div
/fno-sanitize-coverage=edge
/fno-sanitize-coverage=inline-8bit-counters
/fno-sanitize-coverage=trace-cmp
/fno-sanitize-coverage=trace-div

解説

試験的な /fsanitize-coverage コンパイラ オプションを使用すると、コード カバレッジのサポートと、コンパイラによって提供されるどのインストルメンテーションを生成するかを変更するためのさまざまなオプションが提供されます。 /fsanitize=fuzzer オプションを指定すると、これらのオプションがすべて自動的に設定されます。 /fsanitize=fuzzer オプションには、これらのオプションに記載されているものと同じインストルメンテーション ポイントとコールバックが必要です。

/fsanitize-coverage オプションでは、コンマ区切りの構文 (例: /fsanitize-coverage=edge,inline-8bit-counters,trace-cmp,trace-div) は使用できません。 これらのオプションは個別に指定します。

/fsanitize-coverage オプションは、Visual Studio 2022 バージョン 17.0 以降で利用できます。

コード カバレッジ

/fsanitize-coverage=edge コンパイラ オプションを使用すると、コード カバレッジ インストルメンテーションがすべての非冗長エッジと共に有効になります。 既に別のオプションによって指定または暗黙的に指定されている場合に、このオプションを無効にするには、/fno-sanitize-coverage=edge を使用します。

インライン カウンター

/fsanitize-coverage=inline-8bit-counters コンパイラ オプションは、関連するすべてのエッジにインライン カウンター インクリメントを追加するようコンパイラに指示します。 このオプションでは、実装する必要がある extern "C" void __sanitizer_cov_8bit_counters_init(uint8_t *start, uint8_t *stop) の呼び出しも追加されます。 引数は、作成されたすべての 8 ビット カウンターを格納する配列の先頭と末尾に対応します。 既に別のオプションによって指定または暗黙的に指定されている場合に、このオプションを無効にするには、/fno-sanitize-coverage=inline-8bit-counters を使用します。

比較のトレース

/fsanitize-coverage=trace-cmp コンパイラ オプションは、次の関数の呼び出しを挿入するようコンパイラに指示します。

// Before each comparison instruction of the stated size.
void __sanitizer_cov_trace_cmp1(uint8_t Arg1, uint8_t Arg2);
void __sanitizer_cov_trace_cmp2(uint16_t Arg1, uint16_t Arg2);
void __sanitizer_cov_trace_cmp4(uint32_t Arg1, uint32_t Arg2);
void __sanitizer_cov_trace_cmp8(uint64_t Arg1, uint64_t Arg2);

// Before each comparison instruction of the stated size, if one of the operands (Arg1) is constant.
void __sanitizer_cov_trace_const_cmp1(uint8_t Arg1, uint8_t Arg2);
void __sanitizer_cov_trace_const_cmp2(uint16_t Arg1, uint16_t Arg2);
void __sanitizer_cov_trace_const_cmp4(uint32_t Arg1, uint32_t Arg2);
void __sanitizer_cov_trace_const_cmp8(uint64_t Arg1, uint64_t Arg2);

既に別のオプションによって指定または暗黙的に指定されている場合に、このオプションを無効にするには、/fno-sanitize-coverage=trace-cmp を使用します。

区分のトレース

/fsanitize-coverage=trace-div コンパイラ オプションは、次の関数の呼び出しを挿入するようコンパイラに指示します。

// Before a division instruction of the stated size.
void __sanitizer_cov_trace_div4(uint32_t Val);
void __sanitizer_cov_trace_div8(uint64_t Val);

既に別のオプションによって指定または暗黙的に指定されている場合に、このオプションを無効にするには、/fno-sanitize-coverage=trace-div を使用します。

高度なコンパイラ オプションを設定するには

  1. プロジェクトの [プロパティ ページ] ダイアログ ボックスを開きます。

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

  3. [追加のオプション] プロパティを変更して /fsanitize-coverage オプションを設定します。

  4. [OK] または [適用] を選択して、変更内容を保存します。

関連項目

MSVC コンパイラ オプション
MSVC コンパイラのコマンド ライン構文
/fsanitize (サニタイザーの有効化)
AddressSanitizer のビルドと言語リファレンス