Abstract

One of the key problems in modern static verification methods is a precise model for semantics of expressions containing pointers. The trustworthiness of the verification verdict highly depends on the analysis of these expressions. In the paper we describe the verification methods with memory models based on uninterpreted functions, allowing analyzing programs containing expressions with pointers, including pointers to structures, arrays and pointer arithmetic. The approach is limited finite array size and finite recursion depth for dynamic data structures. The method is scalable, as far as it demonstrates reasonable verification times on the industrial size benchmarks containing device drivers of Linux operating system.

Highlights

  • One of the key problems in modern static verification methods is a precise model for semantics of expressions containing pointers

  • We describe the verification methods with memory models based on uninterpreted functions, allowing to analyze programs containing expressions with pointers, including pointers to structures, arrays and pointer arithmetic

  • The method was implemented in CPAchecker tool, based on CEGAR with boolean predicate abstractions and Craig interpolation for inferring new predicates used in abstraction refinement

Read more

Summary

Введение

Одна из фундаментальных проблем в современных методах статической верификации программ состоит в точном учете семантики выражений с указателями. Метод BMC позволяет поддерживать для языка программирования широчайший набор конструкций, включая выражения с указателями, в том числе указатели на структуры, массивы, адресную арифметику, но так как рассматриваются только конечные пути, то рекурсивные структуры данных поддерживаются на конечную глубину Что свойства, доказанные для абстракции, должны быть верны и на исходной системе. В зависимости от конкретной реализации данный подход позволяет достигать различной точности анализа выражений с указателями, при этом использование теории неинтерпретируемых функций дает возможность его применения только для объектов с наперед заданными размерами. Данный подход обладает ограничениями по сравнению с анализом рекурсивных структур данных для анализа динамических структур данных, так как в нем отсутствуют средства сворачивания длинных последовательностей элементов, однако для структур данных относительно небольшого фиксированного размера его использование может быть вполне оправдано

Обзор метода
Полнота предлагаемого метода
Программы и поток управления
Булевы предикатные абстракции
Кодирование с настраиваемым размером блока
Модель памяти на основе неинтерпретируемых функций
Расширение подхода для структур
Пример построения формулы пути
Оптимизации
Результаты
Заключение

Talk to us

Join us for a 30 min session where you can share your feedback and ask us any queries you have

Schedule a call

Disclaimer: All third-party content on this website/platform is and will remain the property of their respective owners and is provided on "as is" basis without any warranties, express or implied. Use of third-party content does not indicate any affiliation, sponsorship with or endorsement by them. Any references to third-party content is to identify the corresponding services and shall be considered fair use under The CopyrightLaw.