/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
для отключения этого параметра, если он уже предоставлен или подразумевается другим параметром.
Настройка дополнительных параметров компилятора
Откройте диалоговое окно страниц свойств проекта.
Перейдите на страницу свойств Свойства конфигурации>C/C++>Командная строка.
Измените свойство "Дополнительные параметры", чтобы задать параметры /fsanitize-coverage.
Нажмите кнопку "ОК" или "Применить", чтобы сохранить изменения.
См. также
Параметры компилятора MSVC
Синтаксис командной строки компилятора MSVC
/fsanitize
(Включить санитизаторы)
Справочник по сборке и языку AddressSanitizer