Обнаружение возможной перезаписи переменных вследствие использования функций нелокальных переходов
https://doi.org/10.15514/ISPRAS-2023-35(6)-7
Аннотация
Причиной возникновения неопределенного поведения является исходный код, написанный с нарушением стандарта языка Си. Неопределенное поведение приводит к появлению уязвимостей в программном обеспечении. Одним из распространенных источников неопределенного поведения является некорректное использование функций нелокальных переходов (в частности setjmp и longjmp). В данной работе рассмотрены средства обнаружения такого типа неопределенного поведения, реализованные в основных современных компиляторах (GCC, Clang, MSVC). Сделаны выводы о том, что эти средства обладают существенными недостатками либо вовсе отсутствуют в отдельных компиляторах. Описана реализация нового метода компиляторной диагностики рассматриваемого неопределенного поведения. Приведенный в работе метод обладает точностью, достаточной для практического применения на реальных проектах. Рассмотрены преимущества представленного решения над похожими существующими.
Ключевые слова
Об авторах
Никита Юрьевич ШУГАЛЕЙРоссия
Старший лаборант кафедры Cистемного программирования Московского физико-технического института. Сфера научных интересов: компиляторные технологии, безопасность программного обеспечения, методы статического анализа кода, оптимизация программ.
Владислав Анатольевич ИВАНИШИН
Россия
Научный сотрудник компиляторного отдела Института системного программирования. Научные интересы включают в себя компиляторные технологии, операционные системы, безопасность программного обеспечения, методы статического анализа кода, оптимизацию программ.
Александр Владимирович МОНАКОВ
Россия
Старший научный компиляторного отдела Института системного программирования. Сферой научных интересов является компиляторные технологии, оптимизация программ.
Список литературы
1. C11 Standard ISO/IEC 9899:2011 // Programming language – C. – 2011. – P. 561. – International standard.
2. Herity, Dominic. C++ in embedded systems: Myth and reality / Dominic Herity // Embedded Systems Programming. – 1998. – Vol. 11, no. 2. – Pp. 48–71.
3. ISO/IEC/IEEE 9945:2009 // Portable Operating System Interface (POSIX®) Base Specifications, Issue 7. – 2009. – P. 37. – International standard.
4. Xu, Xiao. Research on coroutine-based process interaction simulation mechanism in c++ / Xiao Xu, Ge Li // AsiaSim 2012: Asia Simulation Conference 2012, Shanghai, China, October 27-30, 2012. Proceedings, Part III / Springer. – 2012. – Pp. 178–187.
5. Baev, Roman Vyacheslavovich. Prevention of vulnerabilities arising from optimization of code with Undefined Behavior / Roman Vyacheslavovich Baev, Leonid Vladlenovich Skvortsov, Evgeny Alekseevich Kudryashov, Ruben Arturovich Buchatskiy, Roman Aleksandrovich Zhuykov // Proc. Inst. Syst. Program. RAS. – 2021. – Vol. 33, no. 4. – Pp. 195–210.
6. Novillo, Diego. GCC Internals-Internal Representations / Diego Novillo // GCC IR-2. – 2007.
7. The internals of the GNU compilers. – Аccessed: 2023-11-04. Available at:https://gcc.gnu.org/onlinedocs/gccint/.
8. Merrill, Jason. Generic and gimple: A new tree representation for entire functions / Jason Merrill // Proceedings of the 2003 GCC Summit. – 2003. – Pp. 171–180.
9. /10/11/12 Regression] clobbered by longjmp warning ignores the data flow // Bug 21161, GCC. – Аccessed: 2023-11-04. Available at: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=21161.
10. Aho, Alfred V. Compilers: principles, techniques, and tools / Alfred V Aho, Ravi Sethi, Jeffrey D Ullman // Addison-wesley Reading – 2007. – Vol. 2. - Pp. 399 - 410.
11. Jambor, Martin. The new intraprocedural scalar replacement of aggregates / Martin Jambor //GCC Developers’ Summit. – 2010. – Vol. 47.
12. Tarjan, Robert. Depth-first search and linear graph algorithms / Robert Tarjan // SIAM journal on computing. – 1972. – Vol. 1, no. 2. – Pp. 146–160.
13. Haghighat, Mohammad R. Symbolic analysis for parallelizing compilers / Mohammad R Haghighat. No. 1880. – Springer Science & Business Media, 1995.
Рецензия
Для цитирования:
ШУГАЛЕЙ Н.Ю., ИВАНИШИН В.А., МОНАКОВ А.В. Обнаружение возможной перезаписи переменных вследствие использования функций нелокальных переходов. Труды Института системного программирования РАН. 2023;35(6):121-134. https://doi.org/10.15514/ISPRAS-2023-35(6)-7
For citation:
SHUGALEY N.Yu., IVANISHIN V.A., MONAKOV A.V. Detecting Potentially Clobbered Variables due to the Use of Nonlocal Jumps Functions. Proceedings of the Institute for System Programming of the RAS (Proceedings of ISP RAS). 2023;35(6):121-134. (In Russ.) https://doi.org/10.15514/ISPRAS-2023-35(6)-7