Статический анализ языка Python с использованием девиртуализации
https://doi.org/10.15514/ISPRAS-2025-37(6)-39
Аннотация
В статье предлагается подход к статическому анализу программ на языке Python на основе низкоуровневого внутреннего представления и девиртуализации, который позволяет выполнять межпроцедурный и межмодульный анализ. Подход применим к программам, не содержащим ручных аннотаций типов, и может быть использован для поиска сложных ошибок, которые не ищутся популярными инструментами на основе анализа АСД. Представление для анализа строится по байткоду CPython, затем в результате работы межпроцедурного алгоритма девиртуализации разрешаются вызовы. Предлагаемый подход к девиртуализации уже реализован для языков C, C++, Java, Go и показал хорошие результаты без необходимости изменения существующих детекторов. После адаптации алгоритма для языка Python доля истинных срабатываний детекторов для Python составила от 60% до 96%. Таким образом, изначально предложенный для статически типизированных языков алгоритм оказался применимым к языку Python.
Об авторах
Артемий Львович ГАЛУСТОВРоссия
Магистр, стажёр-исследователь ИСП РАН. Сфера научных интересов: статический анализ исходного кода программ для поиска ошибок.
Константин Игоревич ВИХЛЯНЦЕВ
Россия
Бакалавр Московского физико-технического института (факультет радиотехники и кибернетики). Научные интересы включают статический анализ и профилирование динамических языков программирования.
Алексей Евгеньевич БОРОДИН
Россия
Кандидат физико-математических наук, старший научный сотрудник ИСП РАН. Сфера научных интересов: статический анализ исходного кода программ для поиска ошибок.
Андрей Андреевич БЕЛЕВАНЦЕВ
Россия
Доктор физико-математических наук, член-корреспондент РАН, ведущий научный сотрудник ИСП РАН, профессор кафедры системного программирования ВМК МГУ. Сфера научных интересов: статический анализ программ, оптимизация программ, параллельное программирование.
Список литературы
1. Tiobe index. Available at: https://www.tiobe.com/tiobe-index/ (accessed 23.02.2025).
2. B. Ray, D. Posnett, V. Filkov, and P. Devanbu. A large scale study of programming languages and code quality in github. In Proceedings of the 22nd ACM SIGSOFT international symposium on foundations of software engineering, pp. 155-165, 2014.
3. Pylint documentation. Available at: https://pylint.readthedocs.io/en/latest/ (accessed 03.04.2025).
4. Bandit documentation. Available at: https://bandit.readthedocs.io/en/latest/ (accessed 03.04.2025).
5. Mypy - Optional Static Typing for Python. Available at: https://mypy-lang.org/ (accessed 03.04.2025).
6. Quickstart | Pyre – pyre-check.org. Available at: https://pyre-check.org/docs/pysa-quickstart/ (accessed 03.04.2025).
7. I. Rak-Amnouykit, D. McCrevan, A. Milanova, M. Hirzel, and J. Dolby. Python 3 types in the wild: a tale of two type systems. In Proceedings of the 16th ACM SIGPLAN International Symposium on Dynamic Languages, pp. 57-70, 2020.
8. Ivannikov V., Belevantsev A., Borodin A., Ignatiev V., Zhurikhin D., and Avetisyan A. Static analyzer svace for finding defects in a source program code. Programming and Computer Software, 40(5). pp. 265 275, 2014.
9. A. Borodin and I. Dudina. Intraprocedural Analysis Based on Symbolic Execution for Bug Detection. Programming and Computer Software, 47(8), pp. 858-865, 2021.
10. Dis – disassembler for python bytecode. Available at: https://docs.python.org/3.12/library/dis.html (accessed 03.04.2025).
11. Афанасьев В.О., Дворцова В.В., and Бородин А.Е. Статический анализатор для языков с обработкой исключений. Труды Института системного программирования РАН, 34(6):7-28, 2022. / Afanasyev V.O., Dvortsova V.V., Borodin A.E. Static analysis for languages with exception handling. Trudy ISP RAN/Proc. ISP RAS, vol. 34, issue 6, 2022. pp. 7-28 (in Russian). DOI: 10.15514/ISPRAS-2022-34(6)-1.
12. The python language reference. Available at: https://docs.python.org/3.12/reference/ (accessed 03.04.2025).
13. A. Galustov, A. Borodin, and A. Belevantsev. Devirtualization for static analysis with low level intermediate representation. In 2022 Ivannikov Ispras Open Conference (ISPRAS), pp. 18-23. IEEE, 2022.
14. G. Van Rossum et al. Python programming language. In USENIX annual technical conference, volume 41 of number 1, pp. 1–36. Santa Clara, CA, 2007.
Рецензия
Для цитирования:
ГАЛУСТОВ А.Л., ВИХЛЯНЦЕВ К.И., БОРОДИН А.Е., БЕЛЕВАНЦЕВ А.А. Статический анализ языка Python с использованием девиртуализации. Труды Института системного программирования РАН. 2025;37(6):109-120. https://doi.org/10.15514/ISPRAS-2025-37(6)-39
For citation:
GALUSTOV A.L., VIHLYANTSEV K.I., BORODIN A.E., BELEVANTSEV A.A. Devirtualization-Based Python Static Analysis. Proceedings of the Institute for System Programming of the RAS (Proceedings of ISP RAS). 2025;37(6):109-120. https://doi.org/10.15514/ISPRAS-2025-37(6)-39






