RUS  ENG
Полная версия
ЖУРНАЛЫ // Труды института системного программирования РАН // Архив

Труды ИСП РАН, 2020, том 32, выпуск 3, страницы 7–19 (Mi tisp508)

Архитектура системы дедуктивной верификации машинного кода

И. В. Гладышевa, А. С. Камкинbcad, А. М. Коцынякd, П. А. Путроda, А. В. Хорошиловdabc

a Национальный исследовательский университет «Высшая школа экономики»
b Московский физико-технический институт
c Московский государственный университет имени М. В. Ломоносова
d Институт системного программирования им. В.П. Иванникова РАН

Аннотация: В последние годы ИСП РАН разрабатывает систему дедуктивной верификации машинного (бинарного) кода. Мотивация понятна: современные компиляторы, такие как GCC и Clang/LLVM, не застрахованы от ошибок; тем самым, проверка корректности сгенерированного кода (хотя бы для компонентов с повышенными требованиями к надежности и безопасности) не является лишней. Ключевая особенность предлагаемого подхода состоит в возможности переиспользования формальных спецификаций (пред- и постусловий, инвариантов циклов, лемм и т.п.) уровня исходного кода для верификации машинного кода. Инструмент основан на формальной спецификации системы команд и обеспечивает высокий уровень автоматизации: он дизассемблирует машинный код, извлекая его семантику, адаптирует высокоуровневые спецификации для машинного кода и генерирует условия верификации. Система использует ряд сторонних компонентов, включая анализатор исходного кода (Frama-C), анализатор машинного кода (MicroTESK) и SMT-решатель (СVC4). Модульная архитектура позволяет заменять один компонент другим при изменении формата входных данных или используемой техники верификации. В работе рассматривается архитектура инструмента, описывается наша реализация и демонстрируется пример верификации библиотечной функции memset.

Ключевые слова: формальные методы, дедуктивная верификация, анализ бинарного кода, проверка эквивалентности, архитектура системы команд, машинный код, тестирование компиляторов.

DOI: 10.15514/ISPRAS-2020-32(3)-1



© МИАН, 2024