Может ли возвращаемое значение вызова функции быть символическим, чтобы обойти выполнение этой функции? - PullRequest
0 голосов
/ 05 июля 2018

Я хочу избегать межпроцедурного символического исполнения. Возможно, иметь возвращаемое значение, которое не будет иметь каких-либо ограничений и может разрешить любое возможное конкретное значение.

Возможно ли что-то подобное?

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

Ответы [ 2 ]

0 голосов
/ 11 сентября 2018

Если есть возможность манипулировать исходным кодом, вы можете заменить эти вызовы функций функцией make_symbolic, где вы в основном создаете новую символическую переменную и возвращаете ее как возвращение исходного вызова функции. Или вы можете просто переопределить эти функции, чтобы вернуть новое символическое значение.

0 голосов
/ 12 июля 2018

Такая функциональность не реализована в Klee. Если вы хотите достичь этого, вы должны выполнить это самостоятельно.

Файл, который вы должны посмотреть: lib / Core / Executor.cpp . Исполнитель обрабатывает задание для выполнения инструкций символически. Конкретная функция, которую нужно изменить, называется «executeCall». Вы можете проверить название функции. Если это соответствует вашей цели, просто установите программный счетчик на следующую инструкцию и сделайте возвращаемое значение символическим.

С некоторой работой по программированию, я думаю, что ваши потребности достижимы.

...