Построение графа вызовов для анализа программ


Построение графа вызовов для анализа программ

Фартыгин А. (ИСП РАН, Москва, Россия; МФТИ, Московская. обл., Россия)
Бородин А.Е. (ИСП РАН, Москва, Россия)
Дворцова В.В. (ИСП РАН, Москва, Россия)
Афанасьев В.О. (ИСП РАН, Москва, Россия)
Галустов А.Л. (ИСП РАН, Москва, Россия)
Белеванцев А.А. (ИСП РАН, Москва, Россия; МГУ, Москва, Россия)

Аннотация

Статья посвящена задаче построения графа вызовов для программ, написанных на популярных языках программирования (C/C++, Java, Kotlin, Scala, Go, Python). Описываются открытые инструменты, поддерживающие создание графа вызовов программы на одном из этих языков, и предлагается собственный инструмент определения графа вызовов, который поддерживает все перечисленные языки. Описываются ключевые компоненты предложенного инструмента, в частности, перехват сборки и межмодульная компоновка для точного построения внутреннего представления программы, а также применяемые алгоритмы девиртуализации. Представляются экспериментальные результаты работы инструмента на ряде проектов с открытым исходным кодом, а также результаты работы открытых инструментов на тех же проектах.

Ключевые слова

статический анализ; граф вызовов; граф компоновки; виртуальная машина JVM, язык программирования C/C++, язык программирования Python, язык программирования Go, программный инструмент CodeSkeleton, анализатор Svace.

Издание

Труды Института системного программирования РАН, том 38, вып. 3, часть 1, 2026, стр. 115-128.

ISSN 2220-6426 (Online), ISSN 2079-8156 (Print).

DOI: 10.15514/ISPRAS-2026-38(3)-6

Для цитирования

Фартыгин А., Бородин А.Е., Дворцова В.В., Афанасьев В.О., Галустов А.Л., Белеванцев А.А. Построение графа вызовов для анализа программ. Труды Института системного программирования РАН, том 38, вып. 3, часть 1, 2026, стр. 115-128. DOI: 10.15514/ISPRAS-2026-38(3)-6.

Полный текст статьи в формате pdf (на английском) Вернуться к содержанию тома