Abstract

Bounded model checking (BMC) of C/C++ programs is a matter of scientific enquiry that attracts great attention in the last few years. In this paper, we present our approach to this problem. It is based on combining several recent results in BMC, namely, the use of LLVM as a baseline for model generation, employment of high-performance Z3 SMT solver to do the formula heavy-lifting, and the use of various function summaries to improve analysis efficiency and expressive power. We have implemented a basic prototype; experiment results on a set of simple test BMC problems are satisfactory.

Highlights

  • В настоящее время программное обеспечение (ПО) все шире используется в самых разных областях человеческой деятельности, начиная с атомных электростанций и самолетов и заканчивая «умными домами» и бытовой техникой

  • Это значительно упрощает построение модели за счет большей структурированности LLVM IR и возможности использования уже реализованных в LLVM анализов и оптимизаций

  • Bounded model checking (BMC) of C/C++ programs is a matter of scientific enquiry that attracts great attention in the last few years

Read more

Summary

Метод ограниченной проверки моделей

Предлагаемый в данной статье подход основывается на объединении результатов двух недавних исследований в области BMC: анализа C/C++ программ на базе LLVM [4] и использования интерполяции Крейга в методе проверки моделей [8, 13]. Как и прочие средства BMC, для борьбы с проблемой взрыва числа состояний он анализирует программу с ограничениями на число итераций циклов и/или глубину рекурсивных вызовов. LLBMC анализирует LLVM IR, что позволяет использовать все возможности системы LLVM для проведения предварительных оптимизаций и упрощений анализируемых программ. Предлагаемый подход, так же как и LLBMC, базируется на LLVM и аппроксимирует память в виде линейной последовательности байт. Что вместо подстановки тел функций в места вызовов предлагается для межпроцедурного анализа использовать аппроксимации. Результаты недавних исследований свидетельствуют о том, что использование аппроксимаций может значительно повысить эффективность анализа без потери полноты и точности [8]

Satisfiability Modulo Theories
Система компиляции LLVM
Аппроксимация функций на основе интерполяции Крейга
Аппроксимация функций на основе пользовательских спецификаций
Особенности реализации
Извлечение логических предикатов
Моделирование памяти в SMT
Обработка циклов
Ограничения прототипа
Набор тестов
Сравнение моделей памяти
Full Text
Published version (Free)

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