Preview

Труды Института системного программирования РАН

Расширенный поиск

Статический анализатор для распознавания массивов в С-программах для задач фаззинга

https://doi.org/10.15514/ISPRAS-2026-38(3)-20

Аннотация

В экосистеме тестирования ПО сетевых устройств крупной телекоммуникационной компании активно применяется фаззинг – подход к тестированию, где на вход тестируемой программе подаются случайные, неожиданные или некорректные входные данные. В связи с отсутствием в языке C динамических массивов как таковых для задач фаззинга C-функций оказывается полезной информация о массивах, которые принимаются на вход функциями. В данной работе предлагается специальный вид статического анализа для автоматического распознавания массивов, с которыми работают C-функции, а также определения их длины (аппроксимации). На основе предложенного метода был реализован предметно-ориентированный инструмент, нацеленный на конкретную кодовую базу компании, который при приемлемой производительности смог достичь значений метрик точности 79% и полноты 98% в распознавании массивов, при этом длина массива была правильно определена в 69% случаев. Интеграция нашего инструмента в экосистему тестирования компании позволила значительно улучшить качество фаззинга, увеличив метрику покрытия кодовой базы на 10%, а количество найденных ошибок – на 40%.

Об авторах

Дмитрий Владимирович КОЗНОВ
Санкт-Петербургский государственный университет
Россия

Доктор технических наук, профессор кафедры системного программирования Санкт-Петербургского государственного университета, Сфера научных интересов: программная инженерия, модельно-ориентированная разработка программного обеспечения, программные данные, машинное обучение.



Данила Александрович УСАЧЕВ
Санкт-Петербургский государственный университет
Россия

Бакалавр Санкт-Петербургского государственного университета, C++-разработчик. Сфера научных интересов: статический анализ кода, фаззинг.



Список литературы

1. Кознов Д.В. Метод предметно-ориентированного анализа программного кода. Научно-технический вестник информационных технологий, механики и оптики. Принята к публикации. 2026.

2. Muchnick S.S. Advanced Compiler Design and Implementation. Morgan Kaufmann, 1997, 856 p.

3. Lengauer T., Tarjan R. E. A Fast Algorithm for Finding Dominators in a Flowgraph. ACM Transactions on Programming Languages and Systems (TOPLAS), vol. 1, no. 1, 1979, pp. 121-141. DOI: 10.1145/357062.357071.

4. Clang: A C language family frontend for LLVM. Available at: https://clang.llvm.org/, accessed 22.09.2025.

5. Clang Static Analyzer. Available at: https://clang.llvm.org/docs/ClangStaticAnalyzer.html, accessed 22.09.2025.

6. SQLite Home Page. Available at: https://sqlite.org/, accessed 22.09.2025.

7. JSON Compilation Database Format Specification – Clang documentation. Available at: https://clang.llvm.org/docs/JSONCompilationDatabase.html, accessed 22.09.2025.

8. Introduction to the Clang AST. Available at: https://clang.llvm.org/docs/IntroductionToTheClangAST.html, accessed 22.09.2025.

9. DMM (Dual Mode, Multi-protocol, Multi-instance). Available at: https://github.com/Huawei/DMM, accessed 22.09.2025.

10. Array Tool Evaluation, 2025. Available at: https://github.com/usachev63/arraytool-results, accessed 19.10.2025.

11. Морозов И.А., Мисонижник А.В., Мордвинов Д.А., Кознов Д.В., Иванов Д.А. Симкретная модель памяти с ленивой инициализацией и объектами символьного размера в символьной виртуальной машине KLEE. Труды ИСП РАН, 2023, том 35, вып. 3, стр. 91-108 (на английском языке). DOI: 10.15514/ISPRAS–2023–35(3)–7.

12. Berezun D., Boulytchev D. Precise Garbage Collection for C++ with a Non-Cooperative Compiler. Proceedings of the 10th Central and Eastern European Software Engineering Conference in Russia, 2014, no. 15, pp. 1-8. DOI: 10.1145/2687233.2687244.

13. Ivannikov, V.P., Belevantsev, A.A., Borodin, A.E. et al. Static analyzer Svace for finding defects in a source program code. Programming and Computer Software, 2014, vol. 40, pp. 265–275 (2014). DOI: 10.1134/S0361768814050041.

14. A. Belevantsev et al. "Design and Development of Svace Static Analyzers", 2018 Ivannikov Memorial Workshop (IVMEM), Yerevan, Armenia, 2018, pp. 3-9, DOI: 10.1109/IVMEM.2018.00008.

15. Герасимов А.Ю., Канахин А.А., Привалов П.А., Жуков А.А., Каминский Е.А. Применение статического анализа исходного кода для поиска проблем с производительностью: примеры из практики. Труды ИСП РАН, 2022, том 34, вып. 4, стр. 7-20. DOI: 10.15514/ISPRAS-2022-34(4)-1.

16. Misonizhnik A., Morozov S., Kostyukov Y., Kalugin V., Babushkin A., Mordvinov D., Ivanov D. KLEEF: Symbolic Execution Engine (Competition Contribution). Fundamental Approaches to Software Engineering: 27th International Conference, FASE 2024, Held as Part of the European Joint Conferences on Theory and Practice of Software, ETAPS 2024, Luxembourg City, Luxembourg, April 6–11, 2024, Proceedings, pp. 314-319. DOI: 10.1007/978-3-031-57259-3_18.

17. Cadar C., Dunbar D., Engler D. KLEE: unassisted and automatic generation of high-coverage tests for complex systems programs. In Proceedings of the 8th USENIX conference on Operating systems design and implementation (OSDI'08), 2008, pp. 209-224.

18. LLVM Language Reference Manual. Available at: https://llvm.org/docs/LangRef.html, accessed 18.10.2025.

19. Devopedia. TLV Format. Version 2, February 18, 2023. Available at: https://devopedia.org/tlv-format, accessed 04.11.2025.


Рецензия

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


КОЗНОВ Д.В., УСАЧЕВ Д.А. Статический анализатор для распознавания массивов в С-программах для задач фаззинга. Труды Института системного программирования РАН. 2026;38(3):33-48. https://doi.org/10.15514/ISPRAS-2026-38(3)-20

For citation:


KOZNOV D.V., USACHEV D.A. Static Analyzer for Array Recognition in C Programs for Fuzzing. Proceedings of the Institute for System Programming of the RAS (Proceedings of ISP RAS). 2026;38(3):33-48. (In Russ.) https://doi.org/10.15514/ISPRAS-2026-38(3)-20



Creative Commons License
Контент доступен под лицензией Creative Commons Attribution 4.0 License.


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