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


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

Работа №126717

Тип работы

Бакалаврская работа

Предмет

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

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

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


Введение 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)
...


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



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


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