Тип работы:
Предмет:
Язык работы:


Разработка фаззера для языков C/C++ на основе универсальной фаззинг платформы

Работа №143104

Тип работы

Дипломные работы, ВКР

Предмет

программирование

Объем работы24
Год сдачи2023
Стоимость4600 руб.
ПУБЛИКУЕТСЯ ВПЕРВЫЕ
Просмотрено
14
Не подходит работа?

Узнай цену на написание


Введение 3
Постановка задачи 5
1. Обзорный раздел по предметной области 6
1.1. Фаззинг 6
1.2. LLVM 7
1.3. Универсальная фаззинг платформа 7
1.4. Аналоги 8
1.5. Обзор литературы 10
1.5.1 PolyFuzz: Holistic Greybox Fuzzing of Multi-Language
Systems 10
1.6. Вывод 11
2. Программная реализация 12
2.1. Основные компоненты 12
2.2. Реализация предобработчика исходного кода 12
2.2.1 Реализация LLVM Pass 13
2.2.2 Встраивание LLVM Pass в систему сборки CMake . . . 14
2.3. Реализация протокола обмена данными 17
2.4. Реализация исполнителя C++ 18
2.5. Реализация исполнителя Java 19
2.6. Пример использования 19
3. Тестирование 22
3.1. Функция isPalindrome 22
3.2. Выводы 24
3.3. Дальнейшей развитие 24
Заключение 26
Список литературы 27


С момента начала разработки программного обеспечения стоит проблема тестирования и выявления дефектов и неисправностей. С ростом сложности программ и увеличением размера кодовой базы важность проблемы только растёт.
Почти всегда необходимо не только установить факт того, что программа выдаёт неправильный результат, не завершает исполнение или завершается аварийно, но так же и определить набор входных данных, на которых это произошло. Для этого часто используют фаззинг.
Фаззинг - метод тестирования программного обеспечения, который основан на генерации входных данных для тестируемого программного обеспечения. Фаззеры стараются генерировать такие данные, которые скорее всего выявят проблемы в программе: заведомо некорректные данные, данные неверного формата, краевые случаи данных.
Для генерации новых данных часто используется уже готовый корпус тестовых случаев. Его загружают перед стартом фаззинга и в дальнейшем к нему применяют различные мутации, комбинируют тестовые данные друг с другом, чтобы получить новые входные данные. Для мутаций часто используют случайные величины, эвристики, но нередко и машинное обучение.
После генерации данные передаются на вход тестируемой программе. Поведение программы анализируется: собирается информация о том, по какому пути пошло исполнение программы, завершилась ли программа аварийно, каков результат выполнения программы. Эти данные передаются фаззеру и на их основе принимается решение о том, как продолжать фаззинг и генерировать новые тестовые случаи.
Таким образом, фаззер состоит из двух независимых частей. В первой части происходит генерация и обработка данных об исполнении программы. Во второй части происходит непосредственно запуск программы на переданных входных данных.
Часто обе части разрабатываются вместе для фаззинга программ на одном из языков программирования:
1. LibFuzzer [1] — фаззер для C/C++.
2. Jsfuzz [3] — фаззер для JavaScript.
Разработка общей фаззинг платформы позволила бы не реализовывать алгоритм фаззинга для каждого языка. Чтобы применить платформу к новому языку программирования, достаточно было бы реализовать вторую часть фаззера для этого языка, которая запускает программу и собирает информацию об исполнении.


Возникли сложности?

Нужна помощь преподавателя?

Помощь в написании работ!


В данной работе были выполнены следующие задачи:
1. Проведён обзор уже существующих решений для фаззинга программ на C/C++. Были изучены аналоги, позволяющие проводить фаззинг программ на нескольких языках программирования.
2. Разработан исполнитель C++ — программный аппарат для запуска программ, написанных на C/C++. Реализована возможность собирать данные об исполнении программы.
3. Разработан протокол для обмена данными между исполнителем Java и исполнителем C++.
4. Разработан исполнитель Java — программный аппарат для запуска универсальной фаззинг платформы и передачи ей данных об исполнении программы.
5. Разработанный фаззер был сравнён с аналогами.



[1] LibFuzzer. URL: https://llvm.org/docs/LibFuzzer.html (дата обр. 06.05.2023).
[2] Radamsa. URL: https://gitlab.com/akihe/radamsa (дата обр. 06.05.2023).
[3] Jsfuzz. URL: https://github.com/fuzzitdev/jsfuzz (дата обр. 06.05.2023).
[4] Универсальная фаззинг платформа. URL: https://github.com/ UnitTestBot/UTBotJava/tree/main/utbot-fuzzing/src/main/ kotlin/org/utbot/fuzzing (дата обр. 02.02.2023)
[5] Fuzzing. URL: https://en.wikipedia.org/wiki/Fuzzing (дата обр. 08.05.2023)
[6] Peach Fuzzer. URL: https://peachtech.gitlab.io/peach-fuzzer- community/ (дата обр. 09.12.2022)
[7] LLVM 14. URL: https://github.com/llvm/llvm-project/tree/ release/14.x (дата обр. 02.02.2023)
[8] CMake 3.24. URL: https://cmake.org/cmake/help/v3.24/release/ 3.24.html (дата обр. 02.02.2023)
[9] JDK 19. URL: https://openjdk.org/projects/jdk/19/ (дата обр. 02.02.2023)
[10] Gradle releases. URL: https://gradle.org/releases/ (дата обр. 02.02.2023)
[11] CMAKE_EXPORT_COMPILE_COMMANDS variable.
URL: https://cmake.org/cmake/help/latest/variable/
CMAKE_EXPORT_COMPILE_COMMANDS.html (дата обр. 02.02.2023)
[12] Socket. URL: https://en.wikipedia.org/wiki/Network_socket (дата обр. 02.02.2023)
[13] LLVM Execution Engine. URL: https://llvm.org/doxygen/
classllvm_1_1ExecutionEngine.html (дата обр. 04.02.2023)
[14] LLVM Pass. URL: https://llvm.org/docs/WritingAnLLVMPass.html (дата обр. 15.01.2023)
[15] LLVM IR file parsing. URL: https://llvm.org/doxygen/ IRReader_8cpp_source.html (дата обр. 04.02.2023)...25



Работу высылаем на протяжении 30 минут после оплаты.



Подобные работы


©2025 Cервис помощи студентам в выполнении работ