[klee-dev] Generate all solutions

Sylvain Gault sylvain.gault at inria.fr
Fri Sep 12 05:12:44 BST 2014


I have the feeling this solution is interesting but I don't understand
what happen for klee.

Sylvain Gault

On Thu, Sep 11, 2014 at 07:54:10PM -0700, Daniel Dunbar wrote:
> One "hack" to do this is to simply loop over all of bytes of the symbolic
> variable, and test each bit in them (you probably can't let the optimizer run
> on this code though, as it will figure out what is happening and remove it).
> For example:
> --
> #include <stdio.h>
> #include <klee/klee.h>
> 
> signed char concretizeByte(signed char input) {
>   unsigned char result = 0;
>   for (int i = 0; i != 8; ++i) {
>     if (input & (1<<i))
>       result |= 1<<i;
>   }
>   return result;
> }
> 
> int main() {
>   signed char x, y;
>   klee_make_symbolic(&x, sizeof(x), "x");
>   klee_make_symbolic(&y, sizeof(y), "y");
> 
>   if (56 * x + 72 * y == 40) {
>     printf("56 * (%d) + 72 * (%d) == 40\n", concretizeByte(x),
>            concretizeByte(y));
>   }
> 
>   return 0;
> }
> --
> will produce all possible solutions to the Diophantine equation 56 * x + 72 * y
> = 40.
> 
> This probably won't be fast. :)
> 
>  - Daniel
> 
> 
> On Sat, Aug 2, 2014 at 2:34 PM, Sylvain Gault <sylvain.gault at inria.fr> wrote:
> 
>     Hello,
> 
>     I would like to use klee as a front-end to an SMT solver. Basically,
>     what I currently do is:
>     - declare input as symbolic;
>     - write the computation in C;
>     - test whether the output is the one I want with an "if";
>     - make klee find an input that activate the "true" branch of the if.
> 
>     And it works quite well, it produce a solution.
>     But then I would like to obtain all the input assignments that would
>     activate that same path.
> 
>     Is there an easy way to do this?
>     I have the feeling that a hack-ish way to do this would be to get the
>     query to kleaver that activate that path (I think I saw an option for
>     that) and feed it repetidely to kleaver (or another SMT solver), each
>     time adding a clause negating the previous solutionS.
> 
>     I think this is a hackish solution because the solver would probably
>     make the same computation over and over again. While outputing the
>     solution and backtracking to find the next one directly would probably
>     be a lot more efficient. But I may be wrong.
> 
>     Thanks in advance.
> 
>     Regards,
>     Sylvain Gault
> 
>     _______________________________________________
>     klee-dev mailing list
>     klee-dev at imperial.ac.uk
>     https://mailman.ic.ac.uk/mailman/listinfo/klee-dev
> 
> 

> _______________________________________________
> klee-dev mailing list
> klee-dev at imperial.ac.uk
> https://mailman.ic.ac.uk/mailman/listinfo/klee-dev





More information about the klee-dev mailing list