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


Проектирование и разработка универсальной символьной виртуальной машины

Работа №142104

Тип работы

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

Предмет

математика и информатика

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

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


Введение 4
Постановка задачи 6
1. Обзор предметной области 7
1.1. SMT-решатели 7
1.2. Символьное исполнение 9
1.3. Общее устройство символьной машины 11
1.4. Общие проблемы в символьном исполнении 12
1.5. Существующие символьные машины 15
2. Описание символьной виртуальной машины 17
2.1. Основные решения 17
2.2. Архитектура 18
2.3. Представление выражений 21
2.3.1 Библиотека KSMT 21
2.3.2 Представление примитивных значений 22
2.3.3 Представление ссылочных значений 23
2.3.4 Представление массивов 24
2.3.5 Представление символьных выражений программы ... 24
2.4. Символьное состояние 27
2.5. Символьная память 28
2.5.1 Регистровый стек 31
2.5.2 Хранилище типов 32
2.6. Символьная куча 32
2.6.1 URegionHeap и регионы памяти 34
2.6.2 Дерево регионов 38
2.6.3 Разделение символьных и конкретных адресов 44
2.7. Модель 48
2.7.1 Композиция 49
2.8. Решатель ограничений 53
2.8.1 Транслятор и декодер 53
2.8.2 Решатель типовых ограничений 54
2.9. Интерпретатор 56
2.10. Очередь состояний 57
2.11. Дополнительные детали 58
2.11.1 Список типов для объекта 58
2.11.2 Операции группового копирования 58
2.11.3 Моделирование библиотеки 59
2.11.4 Регионы типов 59
3. Полученные результаты 60
3.1. Практическое применение 60
3.1.1 Тестовый язык программирования 60
3.1.2 Java 61
3.2. Замеры производительности 62
3.2.1 Скорость работы кучи 62
3.2.2 Сравнение с UTBotJava 64
3.3. Дальнейший планы 66
Заключение 67
Благодарность 68
Список литературы 69


Количество инструментов для анализа кода, помогающих в цикле разработки и поддержки программного обеспечения, постоянно растёт. Область их применения действительно широка: поиск ошибок в процессе написания кода; валидация кода на соответствие стилю, принятому в команде; автоматическая генерация регрессионных тестов; автоматическое нахождение ошибок и уязвимостей; автоматическая проверка инвариантов программ; помощь в написании программ с заданными свойствами; поиск деградаций производительности; генерация описаний функции и многое другое.
Одним из наиболее эффективных и точных подходов в анализе программ является так называемое символьное исполнение. Анализаторы, основанные на символьном исполнении, используются в системах непрерывной сборки в крупных компаниях, таких как Microsoft. Например, инструмент SAGE, использующий символьное исполнение, помог найти критическую ошибку в исходном коде операционной системы Windows [1]. Символьное исполнение активно используется для генерации модульных тестов, позволяя существенно повысить качество кода и сэкономить время разработчиков и тестировщиков.
Идея, лежащая в основе символьного исполнения, заключается в исследовании программы путём перебора различных путей исполнении и проверке предикатов, определяющих очередной путь. При этом конкретные входные значения программы заменяются на символьные, таким образом получается исчерпывающее описание условия ошибки, выраженное с помощью предикатов на входные значения.
Одним из преимуществ символьного исполнения по сравнению с другими техниками является теоретическая доказуемость. Иначе говоря, с помощью символьного исполнения можно проверять некоторые свойства анализируемой программы. К основным недостаткам символьного исполнения можно отнести высокую вычислительную сложность, связанную с необходимостью исследования большого количества состояний программы. К тому же задача проверки выполнимости формулы в теории SMT, на которой основан любой алгоритм символьного исполнения, является NP-трудной, и её решение может занимать длительное время...


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

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

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


В результате данной работы были успешно выполнены следующие задачи:
• Был проведён анализ существующих машин и наиболее часто встречающихся подходов в символьном исполнении.
• Реализовано ядро универсальной символьной виртуальной машины.
• С использованием данного ядра был разработан анализатор для искусственного языка программирования, а также для языка, компилирующегося в байт-код JVM.
• Были проведены замеры производительности на синтетических данных, а также проведено сравнение полученных результатов с машиной символьного исполнения UTBotJava.
Таким образом, была подтверждена возможность использования универсального символьного ядра для написания анализов для разных языков. Полученное ядро ^SVM может существенно сократить время, потраченное на разработку символьного анализатора для произвольного языка с автоматическим управлением памятью. Отдельно стоит отметить, что часть полученных решений до этого не применялась ни в одной известной автору символьной машине и представляет собой перспективный задел для дальнейших исследований.
Всю реализацию универсальной символьной виртуальной машины и анализатора для языка Java можно найти по ссылке: https://github.com/UnitTestBot/usvm.



[1] Patrice Godefroid, Michael Y. Levin, and David Molnar. Sage: Whitebox fuzzing for security testing: Sage has had a remarkable impact at microsoft. Queue, 10(1):20-27, jan 2012.
[2] James King. Symbolic execution and program testing. Commun. ACM, 19:385-394, 07 1976.
[3] Chris Lattner and Vikram Adve. LLVM: A compilation framework for lifelong program analysis and transformation. pages 75- 86, 04 2004.
[4] Cristian Cadar, Daniel Dunbar, and Dawson Engler. Klee: Unassisted and automatic generation of high-coverage tests for complex systems programs. volume 8, pages 209-224, 01 2008.
[5] The TIOBE programming community index. https://www.tiobe.com/ tiobe-index/. Дата обр. 2023-05-24.
[6] The PYPL popularity of programming language index. https:// pypl.github.io/PYPL.html. Дата обр. 2023-05-24.
[7] Stephen A. Cook. The complexity of theorem-proving procedures. In Proceedings of the Third Annual ACM Symposium on Theory of Computing, STOC ’71, page 151-158, New York, NY, USA, 1971. Association for Computing Machinery.
[8] Aaron Stump, Clark Barrett, and David Dill. A decision procedure for an extensional theory of arrays. 01 2002.
[9] Clark W. Barrett, David L. Dill, and Jeremy R. Levitt. A decision procedure for bit-vector arithmetic. In Proceedings of the 35th Annual Design Automation Conference, DAC ’98, page 522-527, New York, NY, USA, 1998. Association for Computing Machinery.
[10] Tjark Weber, Sylvain Conchon, David Deharbe, Matthias Heizmann, Aina Niemetz, and Giles Reger. The SMT competition 2015-2018. J. Satisf. Boolean Model. Comput., 11(1):221-259, 2019.
[11] C Barrett, P Fontaine, and C Tinelli. The smt-lib standard: Version 2.6, 2017. Available: www. SMT-LIB. org.
[12] Leonardo de Moura and Nikolaj Bj0rner. Z3: an efficient smt solver. volume 4963, pages 337-340, 04 2008.
[13] Haniel Barbosa, Clark W. Barrett, Martin Brain, Gereon Kremer, Hanna Lachnitt, Makai Mann, Abdalrhman Mohamed, Mudathir Mohamed, Aina Niemetz, Andres Notzli, Alex Ozdemir, Mathias Preiner, Andrew Reynolds, Ying Sheng, Cesare Tinelli, and Yoni Zohar. cvc5: A versatile and industrialstrength SMT solver. In Dana Fisman and Grigore Rosu, editors, Tools and Algorithms for the Construction and Analysis of Systems - 28th International Conference, TACAS 2022, Held as Part of the European Joint Conferences on Theory and Practice of Software, ETAPS 2022, Munich, Germany, April 2-7, 2022, Proceedings, Part I, volume 13243 of Lecture Notes in Computer Science, pages 415-442. Springer, 2022.
[14] Bruno Dutertre and Leonardo de Moura. The yices smt solver. 01 2006.
[15] Aina Niemetz and Mathias Preiner. Bitwuzla at the smt-comp 2020. arXiv preprint arXiv:2006.01621, 2020...42


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



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


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