Project

General

Profile

Developer documentation » History » Revision 2

Revision 1 (Egor Zheliba, 03/03/2025 07:36 PM) → Revision 2/3 (Egor Zheliba, 03/03/2025 08:05 PM)

h1. Developer documentation 

 В рамках проекта FuzzRV основными директориями для работы являются: 

 * *infra* – в этой директории расположены скрипты и логика для сборки Docker-образов и запуска фаззинга. Здесь же находятся вспомогательные инструменты и настройки, необходимые для автоматизации. 
 * *build* – директория, которая формируется после компиляции фаззера. Содержит: 
 ** тесты, давшие новое покрытие (new coverage); 
 ** исходные сиды (seed corpus), с которых начинается фаззинг; 
 ** скомпилированный и исполняемый файл фаззера; 
 ** дополнительную директорию, куда помещаются тесты, завершившиеся ошибкой соответствующего санитайзера. 
 * *projects* – основная директория с проектами, готовыми к фаззингу. В каждом проекте находятся все необходимые файлы конфигурации (Dockerfile, build.sh и т.д.). По мере развития проекта эта директория пополняется новыми проектами. 

 h2. Описание проекта 

 В каждом проекте, как минимум, должны присутствовать следующие файлы: 

 * *build.sh* – скрипт сборки и компиляции фаззера. Содержит информацию о процессе подготовки среды тестирования (этапы компиляции, генерация фаззинг-ядра, настройка параметров для тестовой среды). 

 * *Dockerfile* – файл, описывающий все зависимости и инструменты, необходимые для работы проекта в Docker-окружении (установка системных пакетов, тулчейна RISC-V, необходимых библиотек и т.д.). Обеспечивает воспроизводимость и независимость процесса фаззинга от внешней среды. 

 * *project.yaml* – конфигурационный файл, в котором указывается, какой движок фаззера (например, libFuzzer или AFL) используется, а также какие санитайзеры (AddressSanitizer, UndefinedBehaviorSanitizer) нужно задействовать. Определяет ключевые параметры тестирования. 

 * *projectName_fuzzer.cpp* – исходный код фаззера, содержащий функцию `LLVMFuzzerTestOneInput` (для libFuzzer) или аналогичную точку входа для выбранного движка, а также необязательные дополнительные мутаторы, инициализацию, вызовы тестируемой модели и т.п. 

 h3. Изменения в файлах и создание собственных проектов 

 Все перечисленные файлы (*build.sh*, *Dockerfile*, *project.yaml*, *projectName_fuzzer.cpp*) могут подвергаться модификациям по мере необходимости: 
 - обновление версий пакетов и библиотек в *Dockerfile*; 
 - корректировка процесса сборки или фаззинга в *build.sh*; 
 - дополнение или изменение настроек фаззера (движок, санитайзеры) в *project.yaml*; 
 - доработка кода фаззера (новые мутаторы, иной порядок запуска тестируемой модели) в *projectName_fuzzer.cpp*. 

 Если требуется создать собственный проект для фаззинга, его необходимо разместить в директории *projects* и включить туда все необходимые конфигурационные файлы, аналогично уже существующим проектам. Такой подход обеспечивает гибкость и позволяет легко расширять FuzzRV новыми сценариями тестирования или менять окружение под конкретные цели и требования.