Skip to the content.

Конфигурационный файл Sydf-fuzz

Конфигурационный файл (sydr-fuzz.toml) используется для задания опций фаззера и Sydr. Все пути задаются либо абсолютно, либо относительно директории, в которой расположен конфигурационный файл. Для настройки запуска различных инструментов в этом файле указываются таблицы [sydr], [libfuzzer], [aflplusplus] (или список таблиц [[aflplusplus]]), [atheris], [jazzer], [jazzer_js], [sharpfuzz], и [cov]. Конфигурационный файл задает настройки для анализа конкретной фаззинг-цели, поэтому он не может одновременно содержать таблицы для несовместимых инструментов (на примере ниже для краткости приведены сразу все таблицы). Таблицы [atheris], [jazzer] и [jazzer_js] несовместимы с какой-либо другой таблицей, таблица [sharpfuzz] может одновременно находиться в файле только с таблицей [cov], причем эта таблица должна быть указана в одном из двух специальных форматов (на примере ниже приведены все таблицы для краткости). К тому же таблица [cov] не может находиться в файле без других таблиц.

exit-on-time = 7200

[sydr]
args = "-j 4"
target = "/target_sydr @@"
jobs = 3

[aflplusplus]
args = "-t 5000 -i /corpus"
target = "/target_afl @@"
jobs = 6

[libfuzzer]
path = "/target_fuzzer"
args = "-dict=/json.dict -jobs=6 /corpus"

[atheris]
path = "/target.py"
args = "/corpus -jobs=4 -workers=4"

[jazzer]
args = "--cp=/out --asan -jobs=4 /corpus"
target_class = "ExampleFuzzerNative"

[jazzer_js]
path = "/target.js"
args = "-i=mylib /corpus -- -jobs=4 -workers=4"

[sharpfuzz]
args = "-i /corpus -t 10000"
target = "/target.dll"
casr_bin = "/casr_target.dll"
dotnet = "/usr/bin/dotnet"
jobs = 2

# Для Sharpfuzz с инструментом AltCover.
[cov]
build_dir = "/fuzz"
tool_path = "/usr/bin/altcover"

# Для Sharpfuzz с инструментом minicover.
[cov]
target = "/fuzz/Program.cs"
source = "/source"
build_dir = "/fuzz"
tool_path = "/usr/bin/minicover"
use_minicover = true

# Для инструментированного C/C++/Rust/Go кода.
[cov]
target = "/instrumented_target @@"

exit-on-time - опциональный параметр указывает время в секундах. Если в течение этого времени покрытие не растет, фаззинг автоматически завершается.

out - опциональный параметр указывает путь до выходной директории с проектом, где содержатся артефакты и результаты работы фаззинга. Если не указывать эту опцию, то проект создастся в текущей директории с именем <CONFIG>-out. Данный параметр дублирует аргумент командной строки --output, который считается более приоритетным, чем значение из конфигурационного файла.

Sydr

[sydr]
args = "-j 4"
target = "/target_sydr @@"
jobs = 3
timeout = 1000
cache = true
optimistic = true
fuzzmem = false
wait_jobs = false
solving_limit = false
symaddr = 20
fuzzer_dir = "/path/to/fuzzer/dir"
output_dir = "/path/to/output/dir"
minimize_sydr_inputs = true
[sydr.env]
    CLASSIC_ENVVAR = "XXX"

Таблица [sydr] может содержать следующие параметры:

args - аргументы Sydr. Опции --sym-file и --log-file задаются автоматически, их указывать не надо.

target - строка запуска обертки для Sydr. Вместо имени символьного входного файла следует использовать @@.

jobs - число процессов Sydr для запуска (по умолчанию 1). Всего запускается jobs процессов Sydr в -j (задается в args) потоков каждый.

timeout - тайм-аут в секундах, по истечении которого процесс Sydr будет остановлен. Если параметр не указан, выставляется 20 минут (1200 секунд).

cache - булевый параметр (по умолчанию включен), который включает кэш инвертированных переходов.

optimistic - булевый параметр (по умолчанию включен), который включает оптимистичные решения.

fuzzmem - булевый параметр (по умолчанию включен), который включает режим фаззинга символьных адресов.

wait_jobs - булевый параметр (по умолчанию включен), который включает приостановление построения предиката пути, когда набрано достаточно необработанных запросов к математическому решателю.

solving_limit - булевый параметр (по умолчанию включен), который включает 60 секундный тайм-аут на суммарное время, проведенное в решателе.

symaddr - целочисленный параметр, который включает режим обработки символьных адресов раз в N запусков Sydr (по умолчанию N = 25). Чтобы выключить этот режим, необходимо указать N = 0.

fuzzer_dir - путь до рабочей директории фаззера (только в режиме присоединения Sydr к внешнему фаззеру). В случае AFL++ - worker-директория, в случае libFuzzer - его рабочая директория.

output_dir - путь до выходной директории для Sydr (только в режиме присоединения Sydr к внешнему фаззеру). Здесь будут появляться сгенерированные инструментом Sydr файлы с входными данными.

minimize_sydr_inputs - булевый параметр (по умолчанию включен), который включает минимизацию входных файлов, сгенерированных инструментом Sydr (значим для всех фаззеров, кроме AFL++).

[sydr.env] - таблица, содержащая значения переменных окружения, которые будут выставлены для каждого запускаемого процесса Sydr. Каждая строка таблицы задаёт строковую переменную, имя которой совпадает с именем соответствующей переменной окружения. Значения переменных окружения можно задавать также в системных переменных окружения. При этом значения, заданные в файле конфигурации, более приоритетны, чем значения, заданные в системных переменных окружения.

AFL++

[aflplusplus]
path = "/afl"
args = "-t 5000 -i /corpus"
target = "/target_afl @@"
cmin = 8
jobs = 6
foreign = ["/path/to/foreign_fuzzer/syncdir"]
[aflplusplus.env]
    AFL_PRINT_FILENAMES = "1"
    AFL_MAP_SIZE = "10000000"

Таблица [aflplusplus] может содержать следующие параметры:

args - аргументы AFL++. Необходимым аргументом является опция -i для указания входного корпуса. Дополнительно можно указать опции для инструментации (-Q, -O для бинарной инструментации), тайм-аутов (-t 5000 миллисекунд) и другие.

target - строка запуска обертки для AFL++. Вместо имени входного файла следует использовать @@. Если обертка читает входные данные со стандартного потока ввода, то @@ указывать не нужно.

cmin - булевый/целочисленный параметр (по умолчанию true), который включает минимизацию входного корпуса при старте гибридного фаззинга. Этот параметр также может использоваться для указания числа потоков для параллельного запуска утилиты afl-cmin. Если параметр установлен в true, то используется половина всех доступных ядер на машине. Если указанное число потоков больше, чем доступно ядер на машине, то для распараллеливания afl-cmin используются все ядра. Если параметр выключен (false или 0), то минимизация корпуса перед запуском гибридного фаззинга не производится, а при вызове команды cmin используется половина всех доступных ядер.

jobs - число процессов AFL++ для запуска (по умолчанию 1).

Для таблицы [aflplusplus] запуск нескольких процессов AFL++ осуществляется автоматически в соответствии с рекомендациями: запускается один основной фаззер (afl_main-worker) и jobs-1 второстепенных процессов (afl_s<i>-worker), каждый второстепенный фаззер имеет свой набор генерируемых автоматически опций с настройками фаззинга.

Одновременно нельзя запустить более 64 процессов AFL++, так как это очень неэффективная стратегия для гибридного фаззинга (объяснение).

path - путь до AFL++ и его утилит. Параметр не обязателен, если путь добавлен в $PATH (в докере sydr/ubuntu20.04-sydr-fuzz уже добавлен).

foreign - директории с очередью сторонних фаззеров (опция -F AFL++). Параметр может быть строкой или массивом строк. Путь до директорий с очередью сторонних фаззеров может быть указан относительно конфигурационного файла. Синхронизация со сторонними фаззерами доступна только для главного процесса AFL++ (-M), поэтому при указании foreign требуется несколько запущенных экземпляров AFL++ (jobs > 1).

[aflplusplus.env] - таблица, содержащая значения переменных окружения, которые будут выставлены для каждого запускаемого процесса AFL++. Каждая строка таблицы задаёт строковую переменную, имя которой совпадает с именем соответствующей переменной окружения.

Для настройки AFL++ можно использовать различные переменные окружения. Переменные AFL_SKIP_CPUFREQ=1, AFL_NO_UI=1, AFL_PRINT_FILENAMES, AFL_AUTORESUME, AFL_MAP_SIZE=65536 выставляются автоматически по необходимости. AFL_MAP_SIZE можно задать своим значением, однако это в большинстве случаев не требуется, т.к. afl-fuzz определяет размер битовой карты автоматически. Переменная AFL_PRINT_FILENAMES=1 позволяет во время минимизации следить, какой файл обрабатывается в данный момент. Это удобно, когда в корпусе находятся входные файлы, приводящие к аварийному завершению, что приводит к ошибке работы минимизации. При помощи AFL_PRINT_FILENAMES=1 можно будет найти такие файлы и удалить их. Также для тяжелых фаззинг целей можно выставить большое значение переменной AFL_FORKSRV_INIT_TMOUT, отвечающей за максимальное время инициализации форк-сервера AFL++, а также выставить переменную AFL_MAP_SIZE=10000000. Для лучшего взаимодействия AFL++ и Sydr можно уменьшить интервал синхронизации AFL_SYNC_TIME (указывается в минутах, по умолчанию 30 минут). Также могут быть полезными переменные AFL_DISABLE_TRIM, AFL_SHUFFLE_QUEUE, AFL_NO_AFFINITY.

По умолчанию задаются также переменные среды

ASAN_OPTIONS="hard_rss_limit_mb=2048,abort_on_error=1,detect_leaks=0,

malloc_context_size=0,symbolize=0,allocator_may_return_null=1"

UBSAN_OPTIONS="halt_on_error=0,abort_on_error=0,malloc_context_size=0,

allocator_may_return_null=1"

Значения по умолчанию можно менять путем переопределения их в таблице [aflplusplus.env] или в системных переменных окружения. При этом наибольший приоритет имеют значения, заданные в файле конфигурации; средний приоритет имеют значения, заданные в системных переменных окружения; низший приоритет имеют значения по умолчанию. Полный список переменных окружения приведен здесь.

Значение некоторых параметров ASAN_OPTIONS:

hard_rss_limit_mb - задает ограничение памяти анализируемого приложения в Мб (по умолчанию 2 Гб). Чтобы снять ограничение памяти, можно указать 0. Данная опция помогает Casr обнаруживать oom и отличать аварийное завершение от oom на шаге sydr-fuzz casr. Однако AFL++ не поддерживает ограничение памяти через ASAN_OPTIONS. Для обработки oom в AFL++ рекомендуется выключить swap. Тогда программа будет убиваться системным OOM Killer.

detect_leaks - булевый параметр (по умолчанию выключен), который включает режим фаззинга, при котором срабатывания leak-санитайзера считаются аварийными завершениями.

allocator_may_return_null - булевый параметр (по умолчанию включен), который разрешает аллокатору возвращать нулевой указатель.

Задание параметров halt_on_error=1,abort_on_error=1 для UBSAN_OPTIONS включает режим фаззинга, при котором срабатывания ubsan-санитайзера приводят к аварийным завершениям.

Конфигурация AFL++ может быть задана как с помощью одной таблицы [aflplusplus], так и с помощью списка таблиц [[aflplusplus]]. В первом случае все параметры, заданные в таблице, применяются ко всем процессам AFL++. Во втором случае первая таблица является основной и задаёт параметры для основного (main) процесса AFL++ и некоторого числа дополнительных (secondary) процессов, а каждая следующая таблица позволяет запустить определённое число дополнительных (secondary) процессов фаззера со своими параметрами.

Пример с несколькими таблицами:

[[aflplusplus]]
path = "/afl"
args = "-t 5000 -i /corpus"
target = "/target_afl @@"
cmin = true
jobs = 6
[aflplusplus.env]
    AFL_PRINT_FILENAMES = "1"

[[aflplusplus]]
args = "-t 10000"
target = "/target_afl_other @@"
jobs = 2
[aflplusplus.env]
    AFL_MAP_SIZE = "10000000"

Задание различных опций для дополнительных процессов фаззера может быть полезно при использовании инструментации CmpLog (RedQueen) или laf-intel (COMPCOV).

Пример с несколькими таблицами для CmpLog:

[[aflplusplus]]
args = "-i /corpus -t 2000"
target = "/target_afl @@"
jobs = 4

[[aflplusplus]]
args = "-t 2000 -c /target_afl_cmplog -m none"
target = "/target_afl @@"
jobs = 2

Первая таблица списка [[aflplusplus]] может содержать все перечисленные выше параметры. Каждая дополнительная таблица списка [[aflplusplus]] может содержать все перечисленные выше параметры, кроме path и cmin (эти параметры задаются только для первой таблицы списка).

При использовании списка [[aflplusplus]] директории для входного корпуса (опция -i в args) должны совпадать во всех таблицах (кроме того, достаточно задать опцию только для первой таблицы).

Для первой таблицы списка запускается один основной фаззер (afl_main-worker) и jobs-1 второстепенных процессов (afl_s<i>-worker), каждый второстепенный фаззер имеет свой набор генерируемых автоматически опций с настройками фаззинга. Для всех остальных таблиц списка [[aflplusplus]] производится запуск jobs второстепенных процессов (afl_s<i>-worker), каждый второстепенный фаззер имеет одинаковый набор заданных в этой таблице опций. Опция foreign может быть указана только для главной таблицы.

libFuzzer

[libfuzzer]
path = "/target_fuzzer"
args = "-dict=/json.dict -jobs=6 /corpus"
cmin = true
set_cover_merge = true
[libfuzzer.env]
    ASAN_OPTIONS = "allocator_may_return_null=0"

Таблица [libfuzzer] может содержать следующие параметры:

path - путь до libFuzzer обертки.

args - аргументы libFuzzer. В аргументах могут быть указаны входные директории с корпусами. Выходная директория с корпусом автоматически создается в каталоге с проектом (и подставляется в аргументы libFuzzer). В выходной корпус будут минимизированы все входные корпуса. Число процессов libFuzzer можно контролировать через опцию -jobs=N, которая указывает на то, что должно быть выполнено N запусков фаззинга до конца (пока не найден баг или исчерпан лимит времени/числа итераций). Запуски фаззинга распределяются между несколькими процессами libFuzzer (по умолчанию используется не больше половины доступных ядер), число которых можно задать через -workers=N. Если цель для фаззинга аварийно завершается, имеет смысл использовать опции -jobs=M -workers=N, где N - число процессов libFuzzer, а M - число аварийных завершений, зависаний и oom, по достижению которого фаззинг будет завершен. Подробное описание опций libFuzzer можно найти в его документации.

cmin - булевый/целочисленный параметр (по умолчанию true), который включает минимизацию входных корпусов в выходной корпус проекта. Если параметр выключен, то происходит просто копирование входных корпусов в выходной корпус проекта. Минимизацию корпуса, например, можно выключить, когда libFuzzer не справляется минимизировать корпус.

set_cover_merge - булевый параметр (по умолчанию выключен), который позволяет использовать для минимизации опцию libFuzzer set_cover_merge. Если параметр выключен, для минимизации используется опция merge.

[libfuzzer.env] - таблица, содержащая значения переменных окружения, которые будут выставлены для каждого запускаемого процесса libFuzzer. Каждая строка таблицы задаёт строковую переменную, имя которой совпадает с именем соответствующей переменной окружения.

По умолчанию задаётся переменная среды ASAN_OPTIONS="allocator_may_return_null=1".

Значения по умолчанию можно менять путем переопределения их в таблице [libfuzzer.env] или в системных переменных окружения. Значения опций hard_rss_limit_mb и detect_leaks нужно задавать только через соответствующие аргументы libFuzzer: -rss_limit_mb и -detect_leaks. При этом наибольший приоритет имеют значения, заданные в файле конфигурации; средний приоритет имеют значения, заданные в системных переменных окружения; низший приоритет имеют значения по умолчанию.

Atheris

[atheris]
path = "/target_fuzzer"
args = "-dict=/json.dict -jobs=6 /corpus"
cmin = true
set_cover_merge = true
ld_preload = false
[atheris.env]
    ASAN_OPTIONS = "allocator_may_return_null=0"

Таблица [atheris], помимо всех параметров таблицы [libfuzzer], содержит один дополнительный параметр:

ld_preload - булевый параметр (по умолчанию включен), который позволяет при запуске Python-кода для фаззинга, сбора покрытия или анализа аварийных завершений устанавливать переменную среды LD_PRELOAD равной пути до библиотеки asan_with_fuzzer.so, необходимой при работе с кодом, имеющим расширения на языках C/C++, для их инструментации.

Для Atheris по умолчанию задаётся переменная среды

ASAN_OPTIONS="hard_rss_limit_mb=0,abort_on_error=1,detect_leaks=0,malloc_context_size=0,

allocator_may_return_null=1"

Значения по умолчанию можно менять путем переопределения их в таблице [atheris.env] или в системных переменных окружения. При этом наибольший приоритет имеют значения, заданные в файле конфигурации; средний приоритет имеют значения, заданные в системных переменных окружения; низший приоритет имеют значения по умолчанию.

Jazzer

[jazzer]
path = "/path/to/jazzer"
agent_path = "/path/to/jazzer_standalone_deploy.jar"
args = "--cp=/path/to/java/classes/ --asan -jobs=6 /corpus"
target_class = "TargetClass"
cmin = true
set_cover_merge = true
java = "/path/to/jvm/launcher/java"
jacocolib = "/path/to/jacoco/lib"
[jazzer.env]
    LD_LIBRARY_PATH = "/path/to/native/libraries/"

path - путь до бинарного файла jazzer (по умолчанию: /usr/local/bin/jazzer).

agent_path - путь до jazzer API (по умолчанию: /usr/local/lib/jazzer_standalone_deploy.jar).

args - аргументы jazzer и libFuzzer.

target_class - название Java класса с методом fuzzerTestOneInput.

cmin и set_cover_merge - как у libFuzzer.

java - путь до Java лаунчера (по умолчанию берется из PATH).

jacocolib - путь до jar файлов библиотеки jacoco (необходимо для сбора покрытия, по умолчанию: /usr/local/lib/jacoco/lib).

Jazzer поддерживает фаззинг C/C++ библиотек, загруженных JVM, например, через System.load(). Иногда требуется добавить пути, в которых будет производится поиск разделяемых библиотек. Сделать это можно с помощью таблицы [jazzer.env], указав значение переменной среды LD_LIBRARY_PATH.

Для Jazzer по умолчанию задаётся переменная среды

ASAN_OPTIONS="hard_rss_limit_mb=0,abort_on_error=1,detect_leaks=0,malloc_context_size=0,

allocator_may_return_null=1"

Значения по умолчанию можно менять путем переопределения их в таблице [jazzer.env] или в системных переменных окружения. При этом наибольший приоритет имеют значения, заданные в файле конфигурации; средний приоритет имеют значения, заданные в системных переменных окружения; низший приоритет имеют значения по умолчанию.

Jazzer.js

[jazzer_js]
path = "/target_fuzzer"
args = "-i=target_lib /corpus -- -dict=/json.dict -jobs=6"
cmin = true
set_cover_merge = true
ld_preload = false
[jazzer_js.env]
    ASAN_OPTIONS = "allocator_may_return_null=0"

path - путь до Jazzer.js обертки.

args - аргументы Jazzer.js и libFuzzer. Сначала перечисляются аргументы Jazzer.js, затем ставится разделитель “–”, далее перечисляются аргументы libFuzzer.

ld_preload - булевый параметр (по умолчанию включен), который позволяет при запуске JavaScript-кода для фаззинга, сбора покрытия или анализа аварийных завершений устанавливать переменную среды LD_PRELOAD равной пути до библиотеки libclang_rt.asan-x86_64.so, необходимой при работе с кодом, имеющим расширения на языках C/C++, для их инструментации.

Для Jazzer.js по умолчанию задаётся переменная среды

ASAN_OPTIONS="hard_rss_limit_mb=0,abort_on_error=1,detect_leaks=0,malloc_context_size=0,

allocator_may_return_null=1"

Значения по умолчанию можно менять путем переопределения их в таблице [jazzer_js.env] или в системных переменных окружения. При этом наибольший приоритет имеют значения, заданные в файле конфигурации; средний приоритет имеют значения, заданные в системных переменных окружения; низший приоритет имеют значения по умолчанию.

Sharpfuzz

[sharpfuzz]
path = "/afl"
args = "-t 5000 -i /corpus"
target = "/target_sharpfuzz.dll"
casr_bin = "/casr_target_sharpfuzz.dll"
dotnet = "/usr/bin/dotnet"
cmin = 8
jobs = 6
[sharpfuzz.env]
    AFL_PRINT_FILENAMES = "1"

Таблица [sharpfuzz] может содержать следующие параметры:

args - аргументы для AFL++ (так как Sharpfuzz использует AFL++ для фаззинга целей). Необходимым аргументом является опция -i для указания входного корпуса. Дополнительно можно указать опции для инструментации (-Q, -O для бинарной инструментации), тайм-аутов (-t 5000 миллисекунд) и другие.

target - строка запуска обертки. В случае фаззинга C#, это должен быть модуль .dll. Вместо имени входного файла следует использовать @@. Если обертка читает входные данные со стандартного потока ввода, то @@ указывать не нужно.

cmin - булевый/целочисленный параметр (по умолчанию true), который включает минимизацию входного корпуса при старте гибридного фаззинга. Этот параметр также может использоваться для указания числа потоков для параллельного запуска утилиты afl-cmin. Если параметр установлен в true, то используется половина всех доступных ядер на машине. Если указанное число потоков больше, чем доступно ядер на машине, то для распараллеливания afl-cmin используются все ядра. Если параметр выключен (false или 0), то минимизация корпуса перед запуском гибридного фаззинга не производится, а при вызове команды cmin используется половина всех доступных ядер.

jobs - число процессов AFL++ для запуска (по умолчанию 1). Примечания по данному параметру можно посмотреть в описании параметра jobs для AFL++.

path - путь до AFL++ и его утилит. Параметр не обязателен, если путь добавлен в $PATH (в докере sydr/ubuntu20.04-sydr-fuzz уже добавлен).

casr_bin - путь до модуля .dll обертки фаззинг цели без инструментации Sharpfuzz. Данный аргумент обязателен, если будет использоваться команда sydr-fuzz casr для анализа аварийных завершений. Если проект собирался с помощью dotnet publish -o bin, то можно указать модуль, лежащий внутри директории bin/Release, либо можно скопировать проект в другую директорию и собрать без инструментации Sharpfuzz.

dotnet - путь до клиента dotnet. Параметр не обязателен, если путь добавлен в $PATH (в докере sydr/ubuntu20.04-sydr-fuzz уже добавлен).

[sharpfuzz.env] - В данной таблице переменные среды задаются аналогично таблице [aflplusplus.env], но с ограничениями. Переменные среды ASAN_OPTIONS и UBSAN_OPTIONS в Sharpfuzz не используются, переменная среды AFL_MAP_SIZE выставлена по умолчанию равной 10000000 (не рекомендуется выставлять ее значением, меньшим 5000000, так как могут возникнуть ошибки запуска), а переменная AFL_I_DONT_CARE_ABOUT_MISSING_CRASHES выставлена равной 1 в силу особенностей фаззинга C# кода.

Coverage (для C#-кода)

Для minicover:

[cov]
build_dir = "/fuzz"
target = "/fuzz/Program.cs"
source = "/source"
tool_path = "/usr/bin/minicover"
use_minicover = true

Для AltCover:

[cov]
build_dir = "/fuzz"
tool_path = "/usr/bin/altcover"
use_minicover = false

Таблица [cov] содержит следующие параметры:

target - путь до файла с кодом обертки для фаззинга (для minicover).

source - путь до директории с исходным кодом проекта (для minicover).

build_dir - путь до директории, где собирается программа (в этой директории должны лежать фаззинг-обертка и конфигурационный .csproj файл).

use_minicover - булевый параметр (по умолчанию false), который указывает, какой инструмент будет использоваться для сбора покрытия (true - minicover, false - AltCover).

tool_path - путь до инструмента сбора покрытия minicover или AltCover. Если он был установлен как глобальный .NET инструмент, то он будет по умолчанию находиться в $HOME/.dotnet/tools. Параметр не обязателен, если путь добавлен в $PATH (в докере sydr/ubuntu20.04-sydr-fuzz уже добавлен).

Таблица [cov.env] в случае C#-кода не используется, так как переменные окружения для сбора покрытия не используются в minicover и AltCover.

Coverage (для инструментированного C/C++/Rust/Go-кода)

[cov]
target = "/instrumented_target @@"
[cov.env]
    CLASSIC_ENVVAR = "XXX"

Таблица [cov] содержит следующие параметры:

target - строка запуска инструментированного для сбора покрытия целевого исполняемого файла. При сборке исполняемого файла следует использовать флаги: -fprofile-instr-generate -fcoverage-mapping.

[cov.env] - таблица, содержащая значения переменных окружения, которые будут выставлены при сборе покрытия. Каждая строка таблицы задаёт строковую переменную, имя которой совпадает с именем соответствующей переменной окружения.

Значения переменных окружения можно задавать также в системных переменных окружения. При этом значения, заданные в файле конфигурации, более приоритетны, чем значения, заданные в системных переменных окружения.