Как выглядит символическая модель - PullRequest
0 голосов
/ 06 июня 2018

Я пытаюсь понять, как работают движки Symbolic Execution. В этой статье рассматриваются методы, использующие C. Они упоминают о символической памяти:

3.1 Полностью символическая память

На самом высоком уровнеВ общем, механизм может обрабатывать адреса памяти как полностью символические ...

Представление памяти в компактной форме.Этот подход был использован в [32], который отображает символические, а не конкретные адресные выражения в данные, представляя возможные альтернативные состояния, возникающие в результате обращения к памяти с использованием символических адресов в компактной неявной форме

Эта статья также немного разбирается в символических кучах для Java:

4.1. Символическое представление состояния

Символическое состояние s состоит из символическогокуча H, оценка примитивных типизированных полей, условие пути PC и счетчик программ.

Мне интересно, что на практике это означает, эта символическая куча.Для меня это означает, что все структуры данных, используемые в символьном исполнении, будут использовать символическую память, а не фактическую память.Это означает, что структуры, подобные массивам, должны иметь символических моделей .Мне интересно на высоком уровне, как выглядят эти модели.Я не вижу, как вы можете «символически моделировать длину массива».В моей голове это целое число, поэтому это будет целочисленное значение.Но как символическая ценность, интересно, что это значит.Пока не вижуИнтересно, можно ли на высоком уровне объяснить, как бы вы символически моделировали некоторые структуры данных, такие как массивы или структуры, с некоторыми другими значениями полей, так что это было бы полезно при символическом выполнении.

Эта старая статья упоминает:

Можно также определить альтернативную семантику "символического исполнения" для языка программирования, где реальные объекты данных не должны использоваться, но могут быть представлены произвольными символами.

Не уверен, как это выглядит.

Ответы [ 2 ]

0 голосов
/ 08 июня 2018

Полностью документированный пример символического механизма исполнения с открытым исходным кодом - JPF - Symbolic Pathfinder.Он выполняется на уровне виртуальной машины Java.Он также должен ответить на ваши вопросы о более сложных структурах данных, таких как массивы или массивы объектов.

Очень хорошая публикация находится здесь: «Символический PathFinder: интеграция символического выполнения с проверкой модели для анализа байт-кода Java» в Automated Software Engineering Journal 20 (3) 2013 https://ti.arc.nasa.gov/publications/5269/download/

Здесь вы можетесм. подробный пример (раздел 4.9) о том, как конкретный код «переписывается» и преобразуется в символьный код.Особенно то, как обрабатываются память стека и кучи и условия кода в зависимости от этой символической памяти (рис. 6 + 7).Вы не можете просто отделить память от выполнения условного пути.

Очень упрощенно: условия заменяются циклом по всем "символическим" ветвям (недетерминированный выбор).Память заменяется символическими значениями (как вы упомянули - распространяются здесь через так называемые атрибуты) и ограничениями на эти значения в зависимости от цикла ветвления.Решатель ограничений используется для дальнейшего уменьшения невозможных ветвей (обратного отслеживания) и, наконец, для устранения ограничений.

Еще один очень хороший практический пример для .Net-кода - запустить Microsoft SpecExplorer (XRT) в полном символическомрежим с использованием "Combination.KeepUnexpanded".В результирующем графике пройденного пути вы можете увидеть хороший пример того, как символическая память и ограничения представлены.К сожалению, XRT не является открытым исходным кодом.

PS: Действительно, представление символических переменных является одной из больших проблем.Вот несколько очень хороших публикаций:

0 голосов
/ 07 июня 2018

«Массив X имеет размер 100, а элемент в позиции 5 имеет значение 7» является символическим представлением массива.Ключевым моментом символического представления является то, что вы сосредоточены на объяснении только того, что имеет значение.

Если вы хотите представить еще более родовой массив, вы можете также сделать его размер символическим, сказав, что «X имеет размер L» иво время анализа вы можете выяснить, что L = 100 или L> 90.

Сколько вы захватываете различных структур данных, зависит от того, что вы хотите сделать.Связанный список - это набор областей памяти или что-то еще?

...