分享方式:


/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. 選擇 [確定 ] 或 [ 套用 ] 以儲存您的變更。

另請參閱

MSVC 編譯器選項
MSVC 編譯器命令列語法
/fsanitize (啟用消毒器)
AddressSanitizer 組建和語言參考