📄Работа №143104

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

📝
Тип работы Дипломные работы, ВКР
📚
Предмет программирование
📄
Объем: 24 листов
📅
Год: 2023
👁️
Просмотров: 64
Не подходит эта работа?
Закажите новую по вашим требованиям
Узнать цену на написание
ℹ️ Настоящий учебно-методический информационный материал размещён в ознакомительных и исследовательских целях и представляет собой пример учебного исследования. Не является готовым научным трудом и требует самостоятельной переработки.

📋 Содержание

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

🖼 Скриншоты

🛒 Оформить заказ

Работу высылаем в течении 5 минут после оплаты.

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