Помощь студентам в учебе
Реализация анализа потока данных приложений на языке Go
|
Введение 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
Постановка задачи 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.
Язык программирования 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.
Были изучены подходы к общению между разными языками: межъязыковое сообщение при помощи 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 источник
[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 минут после оплаты.
Подобные работы
- Особенности вычисления семантики встроенных языков
Магистерская диссертация, информационные системы. Язык работы: Русский. Цена: 4820 р. Год сдачи: 2016 - Особенности вычисления семантики встроенных языков
Магистерская диссертация, информатика. Язык работы: Русский. Цена: 5500 р. Год сдачи: 2016 - ПОТЕНЦИАЛ ПРИМЕНЕНИЯ ТЕХНОЛОГИИ ДОПОЛНЕННОЙ РЕАЛЬНОСТИ В ГОРОДСКОМ ПРОСТРАНСТВЕ САНКТ-ПЕТЕРБУРГА: ВИРТУАЛИЗАЦИЯ СТРИТ-АРТА В ПРИЛОЖЕНИИ AR HUNTER
Бакалаврская работа, социология. Язык работы: Русский. Цена: 4340 р. Год сдачи: 2022 - Гибридный языково-независимый статический анализ как элемент комплексной технологии программирования
Дипломные работы, ВКР, информатика. Язык работы: Русский. Цена: 4365 р. Год сдачи: 2022 - Корпоративная культура как фактор совершенствования деятельности
информационного агентства (на примере ИА 'Татар-информ')
Магистерская диссертация, менеджмент. Язык работы: Русский. Цена: 5700 р. Год сдачи: 2018 - Особенности использования геобрендинга как инструмента формирования конкурентных преимуществ города на примере города Мурманска и Гамбурга
Магистерская диссертация, реклама & PR. Язык работы: Русский. Цена: 4900 р. Год сдачи: 2019 - СТРУКТУРНО-СЕМАНТИЧЕСКИЕ ОСОБЕННОСТИ
ОБЩЕСТВЕННО-ПОЛИТИЧЕСКОЙ ТЕРМИНОЛОГИИ В РУССКОМ,
АНГЛИЙСКОМ И НЕМЕЦКОМ ЯЗЫКАХ И МЕТОДИКА ЕЕ
ПРЕПОДАВАНИЯ В ФОРМАТЕ CLIL
Магистерская диссертация, лингвистика. Язык работы: Русский. Цена: 4900 р. Год сдачи: 2017 - Особенности реализации экономической дипломатии главой государства королевства Испания в отношении стран Северной Африки и Латинской Америки
Дипломные работы, ВКР, международные отношения. Язык работы: Русский. Цена: 4395 р. Год сдачи: 2019 - Особенности взаимодействия Республики Корея с корейскими диаспорами за рубежом
Магистерская диссертация, международные отношения. Язык работы: Русский. Цена: 4925 р. Год сдачи: 2019