Abstract
In recent years, ISP RAS has been developing a system for machine (binary) code deductive verification. The motivation is rather clear: modern compilers, such as GCC and Clang/LLVM, are not free of bugs; thereby, it is not superfluous (at least for safety- and security-critical components) to check the correctness of the generated code. The key feature of the suggested approach is the ability to reuse source-code-level formal specifications (pre- and postconditions, loop invariants, lemma functions, etc.) at the machine code level. The tool is highly automated: provided that the target instruction set is formalized, it disassembles the machine code, extracts its semantics, adapts the high-level specifications, and generates the verification conditions. The system utilizes a number of third-party components including a source code analyzer (Frama-C), a machine code analyzer (MicroTESK), and an SMT solver (CVC4). The modular design enables replacing one component with another when switching an input format and/or a verification engine. In this paper, we discuss the tool architecture, describe our implementation, and present a case study on verifying the memset C library function.
Highlights
Формально определяется семантика всех операторов языка программирования; функциональные требования к компоненту формализуются в виде пред- и постусловий функций на некотором языке спецификации; пользователем предоставляются дополнительные подсказки для инструмента, такие как инварианты циклов, вспомогательный код и леммы; на основе спецификаций и подсказок инструментом генерируются условия верификации, которые проверяются с помощью решателя или интерактивной системы доказательства теорем; доказательство всех условий верификации означает, что все возможные вычисления компонента удовлетворяют функциональным требованиям с учетом предположений о среде исполнения, средствах разработки и т.п
ISP RAS has been developing a system for machine code deductive verification
The system utilizes a number of third-party components including a source code analyzer (Frama-C), a machine code analyzer (MicroTESK), and an SMT solver (CVC4)
Summary
Роль программного обеспечения (ПО) в критической информационной инфраструктуре постоянно растет. В результате сейчас крайне востребованы прикладные методы и инструменты обеспечения корректности наиболее ответственных компонентов ПО. Для доказательства такого рода свойств применяют методы дедуктивной верификации. Все известные инструменты дедуктивной верификации императивных программ следуют единому подходу [8]: Гладышев И.В., Камкин А.С., Коцыняк А.М., Путро П.А., Хорошилов А.В. Одно из предположений состоит в том, что машинный (бинарный) код, сгенерированный компилятором, соответствует семантике языка программирования. Что эту гипотезу можно принять только для верифицированных компиляторов, например, CompCert [9], используемых в основном в исследовательских проектах. К сожалению, они слишком сложны для верификации, и ошибки в сгенерированном машинном коде не являются редкостью [10]. делается обзор работ, посвященных дедуктивной верификации программ на уровне бинарного кода. описывается архитектура системы дедуктивной верификации машинного кода. В разд. 5 делается заключение и обрисовываются направления дальнейших исследований
Talk to us
Join us for a 30 min session where you can share your feedback and ask us any queries you have