Поделиться через


/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