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


Реализация анализа потока данных приложений на языке Go

Работа №145216

Тип работы

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

Предмет

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

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

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


Введение 3
Постановка задачи 5
Глава 1. Обзор предметной области 6
1.1. IFDS 6
1.2. Существующие инструменты 7
1.2.1 GoSec 7
1.2.2 Go Vulnerability Manager 8
1.3. Символьное исполнение 8
1.4. Создание символьного движка 9
1.4.1 Интеграция с готовым движком 9
1.4.2 Универсальная символьная виртуальная машина .... 10
1.4.3 USVM-Go 11
1.4.4 JacoDB 14
Глава 2. JacoDB-Go 16
2.1. GoToKotlin 17
2.2. Анализ потока данных 22
Глава 3. Оценка полученных результатов 25
3.1. GoToKotlin 25
3.2. Сравнение двух подходов к взаимодействию между языками 27
3.3. Анализ заражений 28
3.3.1 Сравнение с существующими решениями 29
3.4. Генерация тестов 31
Заключение 36
Список литературы 37

Современные программные системы становятся все более сложными, что требует использования эффективных методов анализа и оптимизации кода. Одним из таких методов является анализ потока данных, который поз­воляет отслеживать поток данных через программу и выявлять потенциаль­ные проблемы, такие как неинициализированные переменные, мертвый код и утечки памяти. Анализ потока данных играет ключевую роль в оптимиза­ции компиляторов, статическом анализе кода и обеспечении безопасности приложений.
Язык программирования Go, разработанный компанией Google, приоб­ретает все большую популярность благодаря своей простоте, эффективности и удобству использования. Эти характеристики делают Go отличным выбо­ром для реализации систем анализа кода, включая анализ потока данных. Несмотря на обилие инструментов для других языков программирования, область анализа потока данных для Go еще недостаточно исследована, что создает возможность для разработки новых подходов и инструментов.
В данной работе будет рассматриваться реализация анализа потока дан­ных для проектов, написанных на языке Go. В качестве инструмента для ана­лиза потока данных будет использована Java Compilation Database (JacoDB [15]). Это специализированная база данных, созданная для эффективного анализа и обработки байт-кода JVM. Она объединяет возможности анализа байт-кода с функциями базы данных, предлагая инструменты для разбора, анализа, модификации и хранения информации о Java-коде.
Также в данной работе будет представлен инструмент для переноса структур данных из Go кода в Kotlin код, будет измерена его производитель­ность, а также предложены дальнейшие способы оптимизации.
Будет представлен способ применения полученного представления внут­ри символьного интерпретатора языка Go поверх универсальной символьной виртуальной машины (USVM [3]), а также продемонстрировано улучшение в производительности.
В главе 1 будет произведен обзор предметной области, будут даны ос­новные определения, цели и способы достижения данных целей. Также будут рассмотрены существующие продукты для последующего сравнения произ­водительности. В главе 2 будут описаны разработанные в рамках этой работы инструменты, а также направления для их дальнейшего улучшения. Резуль­таты применения полученных инструментов, а также их производительность будут описаны в главе 3.

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

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

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


В рамках данной работы было изучено несколько подходов к написанию символьных интерпретаторов. Были изучены инструменты: USVM, JacoDB, а также GoSec, govulncheck. Также были изучены подходы к реализации анализа потока данных для программ на языке Go.
Были изучены подходы к общению между разными языками: межъязы­ковое сообщение при помощи JNA и генерация структур на другом языке с дальнейшей сериализацией и десериализацией данных. Также было произве­дено сравнение производительности между ними.
Был поддержан язык Go для JacoDB. Проект был назван JacoDB-Go.
Получен инструмент для переноса любых структур из Go в Kotlin: GoToKotlin. На его работе основывается перенос SSA промежуточного пред­ставления в JacoDB-Go промежуточное представление, что является частью работы USVM-Go. GoToKotlin все еще можно оптимизировать, например, поддержать инкрементальное обновление.
На основе JacoDB-представления был получен инструмент для анализа потока данных. В рамках данной работы он был представлен задачей поиска загрязнений кода. Одними из плюсов данного инструмента являются просто­та и гибкость. Пользователь может задавать свои собственные конфигурации под свои нужды. Таким образом, анализатор сможет искать и пользователь­ские уязвимости, а не только те, что были поддержаны разработчиками. Было проведено сравнение производительности полученного анализатора с суще­ствующими продуктами: gosec и govulncheck.


[1] Thomas Reps, Susan Horwitz, and Mooly Sagiv. Precise interprocedural dataflow analysis via graph reachability. In Proceedings of the 22nd ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages, POPL ’95, page 49-61, New York, NY, USA, 1995. Association for Computing Machinery. URL: https://pages.cs.wisc.edu/~fischer/cs701.f14/ popl95.pdf (дата обр. 16.04.2024).
[2] Roberto Baldoni, Emilio Coppa, Daniele Cono D’Elia, Camil Demetrescu, Irene Finocchi. A Survey of Symbolic Execution Techniques. URL: https: //arxiv.org/abs/1610.00502 (дата обр. 16.04.2024).
[3] Репозиторий USVM. URL: https://github.com/UnitTestBot/usvm (да­та обр. 16.04.2024).
[4] Репозиторий LLVM. URL: https://github.com/llvm/llvm-project (дата обр. 16.04.2024).
[5] KLEE. URL: https://klee-se.org/ (дата обр. 16.04.2024).
[6] KLEEF. URL: https://toolchain-labs.com/projects/kleef.html (дата обр. 16.04.2024).
[7] Пакет gollvm. URL: https://go.googlesource.com/gollvm (дата обр. 16.04.2024).
[8] Обход для того, чтобы простая программа «Привет, мир!» смог­ла скомпилироваться. URL: https://go-review.googlesource.com/c/ gofrontend/+/140917 (дата обр. 16.04.2024).
[9] USVM-Go с переносом структур из Go в Kotlin. URL: https://github. com/UnitTestBot/usvm/tree/buraindo/go-jacodb.
[10] Пакет go/ssa. URL: https://pkg.go.dev/golang.org/x/tools/go/ ssa (дата обр. 16.04.2024).
[11] Репозиторий JNA. URL: https://github.com/java-native-access/ jna (датаобр. 16.04.2024).
[12] Документация JNI. URL: https://docs.oracle.eom/javase/7/docs/ technotes/guides/jni/spec/jniTOC.html (дата обр. 16.04.2024).
[13] Поддержка языка C внутри Go кода, cgo. URL: https://go.dev/wiki/ cgo (дата обр. 16.04.2024).
[14] Репозитории UnitTestBot. URL: https://github.com/UnitTestBot (да­та обр. 16.04.2024).
[15] JacoDB. URL: https://jacodb.org/.
... всего 31 источник


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



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


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