Dear KLEE developers,

May I ask a question about implementing a separate execution in KLEE? My 
initial idea is to separate ("simulate") running a state and evaluate whether 
this state is worthy of exploring in the future further.

I will use the attached figure to explain what I want to do (please take a 
quick look before you read the following).  Assuming normal KLEE execution 
forked once, there will be two states "B" and "C" which can be selected using 
different search strategies to explore. In the first normal execution, I don't 
know which state is good to explore so I randomly select one (say "C" is 
selected). Then, I want to use a "simulation" run (a separate execution from a 
normal execution ) to evaluate the "value/reward" of this state based on the 
results of the simulation run. After the simulation execution terminates, KLEE 
will switch to normal execution. The simulation run should not affect the 
normal run, meaning the switching between normal and simulation runs should 
have no side effects on each other. Note the simulation run can be just a 
single path running for the performance consideration.

Currently, I have two alternatives to implement this feature, but I am not sure 
whether it can work or not


  1.
Deep copy of Executor object, so that the normal/simulation runs will be using 
different executors for their own. The only thing that needs to be considered 
is to switch different Executors. However, based on my understanding, the deep 
copy of an Executor is not supported in the current versions of KLEE so far. Am 
I correct? I doubt that adding such a deep-copy implementation can be difficult.

  2.
Run under the same Executor but need to restore the required data/objects to 
switch the runs. I tried this option, but it seems that there are a lot of 
objects in Executor/ExecutionState that need to be carefully handled. I'd like 
to know whether I used the correct way to implement this feature.

In summary, do you think the above two solutions make sense or do you have any 
other alternative suggestions to do this?  Are there any KLEE variants already 
supporting such a feature? Please kindly advise and I appreciate it very much 
for your helpful comments and suggestions!


Best regards,
Haoxin
_______________________________________________
klee-dev mailing list
[email protected]
https://mailman.ic.ac.uk/mailman/listinfo/klee-dev

Reply via email to