Как использовать тег max-time с klee

Я пытаюсь запустить klee на скомпилированной версии coreutils с байт-кодом, несколько повторяя эксперимент, который klee провел некоторое время назад.

У меня возникли проблемы с выяснением того, как использовать флаг --max-time.

Когда я запускаю эту команду, это занимает около 3 минут, несмотря на то, что максимальное время составляет 10 секунд:

klee --optimize --libc=uclibc --posix-runtime --max-time 10s ./echo.bc --sym-args 0 1 10 --sym-args 0 2 2 --sym-files 1 8 --sym-stdin 8 --sym-stdout

Когда я запускаю эту команду, это занимает около 3 секунд. Команда идентична, за исключением того факта, что имя файла и флаг --max-time меняются местами.

klee --optimize --libc=uclibc --posix-runtime --max-time 10s ./echo.bc --sym-args 0 1 10 --sym-args 0 2 2 --sym-files 1 8 --sym-stdin 8 --sym-stdout

Наконец, когда я запускаю его без флага --max-time

klee --optimize --libc=uclibc --posix-runtime ./echo.bc --sym-args 0 1 10 --sym-args 0 2 2 --sym-files 1 8 --sym-stdin 8 --sym-stdout

это занимает не менее 30 минут, после чего я сдался и убил его.

Ясно, что флаг перед и после имени файла что-то делает, но я не уверен, что именно. Согласно документации, стандартное использование --max-time ставит его перед именем файла. Может ли кто-нибудь помочь мне понять, что происходит?


person Shaheen Cullen-Baratloo    schedule 22.05.2020    source источник


Ответы (1)


KLEE использует реализацию препроцессора аргументов командной строки llvm здесь . А так как опция InputFile является позиционным аргументом, то все последующие игнорируются. Однако такие параметры, как --sym-args, --sym-files, --sym-stdin, обрабатываются в POSIX. время выполнения независимо друг от друга.

person Pavel Yatcheniy    schedule 24.03.2021