Для студентов СПбГУ по предмету ДругиеРазработка фаззера для языков C/C++ на основе универсальной фаззинг платформыРазработка фаззера для языков C/C++ на основе универсальной фаззинг платформы
2024-08-052024-08-05СтудИзба
Курсовая работа: Разработка фаззера для языков C/C++ на основе универсальной фаззинг платформы
Описание
Содержание
3.3.Дальнейшейразвитие...................... 24
Заключение.................................26
Списоклитературы ............................ 27
2
Введение
Почти всегда необходимо не только установить факт того, что програм-ма выдаёт неправильный результат, не завершает исполнение или завершает-ся аварийно, но так же и определить набор входных данных, на которых это произошло. Для этого часто используют фаззинг.
Фаззинг - метод тестирования программного обеспечения, который ос-нован на генерации входных данных для тестируемого программного обес-печения. Фаззеры стараются генерировать такие данные, которые скорее все-го выявят проблемы в программе: заведомо некорректные данные, данные неверного формата, краевые случаи данных.
Для генерации новых данных часто используется уже готовый корпус тестовых случаев. Его загружают перед стартом фаззинга и в дальнейшем к нему применяют различные мутации, комбинируют тестовые данные друг с другом, чтобы получить новые входные данные. Для мутаций часто исполь-зуют случайные величины, эвристики, но нередко и машинное обучение.
После генерации данные передаются на вход тестируемой программе. Поведение программы анализируется: собирается информация о том, по како-му пути пошло исполнение программы, завершилась ли программа аварийно, каков результат выполнения программы. Эти данные передаются фаззеру и на их основе принимается решение о том, как продолжать фаззинг и генери-ровать новые тестовые случаи.
Таким образом, фаззер состоит из двух независимых частей. В первой части происходит генерация и обработка данных об исполнении программы. Во второй части происходит непосредственно запуск программы на передан-ных входных данных.
Часто обе части разрабатываются вместе для фаззинга программ на одном из языков программирования
Введение................................... | 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 |
- Программнаяреализация....................... 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 | |
| | | |
- Тестирование .............................. 22 3.1. Функция isPalindrome . . . . . . . . . . . . . . . . . . . . . . 22
3.3.Дальнейшейразвитие...................... 24
Заключение.................................26
Списоклитературы ............................ 27
2
Введение
- момента начала разработки программного обеспечения стоит пробле-ма тестирования и выявления дефектов и неисправностей. С ростом сложно-сти программ и увеличением размера кодовой базы важность проблемы только растёт.
Почти всегда необходимо не только установить факт того, что програм-ма выдаёт неправильный результат, не завершает исполнение или завершает-ся аварийно, но так же и определить набор входных данных, на которых это произошло. Для этого часто используют фаззинг.
Фаззинг - метод тестирования программного обеспечения, который ос-нован на генерации входных данных для тестируемого программного обес-печения. Фаззеры стараются генерировать такие данные, которые скорее все-го выявят проблемы в программе: заведомо некорректные данные, данные неверного формата, краевые случаи данных.
Для генерации новых данных часто используется уже готовый корпус тестовых случаев. Его загружают перед стартом фаззинга и в дальнейшем к нему применяют различные мутации, комбинируют тестовые данные друг с другом, чтобы получить новые входные данные. Для мутаций часто исполь-зуют случайные величины, эвристики, но нередко и машинное обучение.
После генерации данные передаются на вход тестируемой программе. Поведение программы анализируется: собирается информация о том, по како-му пути пошло исполнение программы, завершилась ли программа аварийно, каков результат выполнения программы. Эти данные передаются фаззеру и на их основе принимается решение о том, как продолжать фаззинг и генери-ровать новые тестовые случаи.
Таким образом, фаззер состоит из двух независимых частей. В первой части происходит генерация и обработка данных об исполнении программы. Во второй части происходит непосредственно запуск программы на передан-ных входных данных.
Часто обе части разрабатываются вместе для фаззинга программ на одном из языков программирования
Характеристики курсовой работы
Список файлов
Разработка фаззера для языков C:C++ на основе универсальной фаззинг платформы.doc