[klee-dev] Using KLEE to obtain Path Constraints from concrete input queries in an Active Learning setting

Bharat Garhewal b.garhewal at cs.ru.nl
Tue Mar 23 10:46:49 GMT 2021


I used:

klee -write-kqueries --libc=uclibc --posix-runtime --external-calls=all 
--seed-out=file.bout example.bc

On 23/03/2021 11:43, Ridwan Shariffdeen wrote:
> Hi
> What's the Klee command you used
>
> On Tue, Mar 23, 2021, 6:40 PM Bharat Garhewal <b.garhewal at cs.ru.nl 
> <mailto:b.garhewal at cs.ru.nl>> wrote:
>
>     Dear Ridwan,
>
>     Thank you for the link! I'm trying to use your KLEE fork (from
>     GitHub, not the DockerHub), but I'm unable to capture the
>     information that I want.
>
>     For instance, I've consider the following code:
>
>         #include <stdio.h>
>         #include <stdlib.h>
>         #include </klee/source/include/klee/klee.h>
>
>         int main(){
>             int k;
>             klee_make_symbolic(&k, sizeof(k), "k");
>             if (k == 20)
>                 printf("Statement Five\n");
>             else
>                 printf("Statement Six\n");
>
>             printf("\nk=%d\n", k);
>             return 0;
>
>         }
>
>     I generate the seed file with: gen-bout --second-var model_version
>     4 01 --second-var k 4 20
>
>     However, the kquery file I get is:
>
>         array k[4] : w32 -> w8 = symbolic
>         array model_version[4] : w32 -> w8 = symbolic
>         (query [(Eq 1
>                      (ReadLSB w32 0 ))
>                  (Eq 20 <---------- I would expect 'k' here
>                      (ReadLSB w32 0 ))]
>                 false)
>
>     Is this the expected behaviour, or perhaps I am doing something wrong?
>
>     Regards,
>
>     Bharat
>
>     On 13/03/2021 12:33, Ridwan Shariffdeen wrote:
>>     Hi,
>>
>>     What you are looking for is for a concolic execution. I have a
>>     modified version of KLEE to get what you want.
>>     You can refer to the repo
>>     https://github.com/rshariffdeen/klee/tree/concolic
>>     <https://github.com/rshariffdeen/klee/tree/concolic> and build
>>     KLEE. There is also a docker image hosted at
>>     dockerhub rshariffdeen/klee:concolic which is already built.
>>
>>     Then using seed-file, you can feed the concrete input and it
>>     willl  be executed concretely but capturing the symbolic
>>     constraints you need. If you are not familiar with see-file
>>     setting, I can let you know how to use for one example.
>>     Let me know, if you have any questions or if this works for you
>>
>>     Regards
>>
>>     On Fri, Mar 12, 2021 at 9:42 PM Bharat Garhewal
>>     <b.garhewal at cs.ru.nl <mailto:b.garhewal at cs.ru.nl>> wrote:
>>
>>         Dear all,
>>
>>         I'm working on (white-box/grey-box) Active Automata Learning
>>         for programs with data parameters
>>         (i.e., our automata contain data parameters in guards and in
>>         i/o).
>>         We require that for each concrete query, we can extract data
>>         (i.e., path) constraints for that query.
>>         For instance, consider that we have a one-element FIFO buffer
>>         with two actions: PUSH(p) and POP(p):
>>         Given a query of the form ``PUSH(p1=5) POP(p2=3)'' (where p1
>>         and p2 are the "markers"/"names" given
>>         to 5 and 3), we want to retrieve the constraint "p1 =/= p2"
>>         from the path followed by the program
>>         (assuming that the comparison between 5 and 3 actually
>>         happens in the program). We're trying
>>         to obtain these PC using KLEE.
>>
>>         I've been trying to get concrete inputs working with KLEE
>>         (latest docker build) and Zesti (docker, from
>>         https://github.com/rshariffdeen/zesti
>>         <https://github.com/rshariffdeen/zesti>), but I guess I'm
>>         doing something wrong.
>>         For instance, consider the "Tutorial One" example, get_sign,
>>         with no changes to the source code.
>>         If I run it with klee-zesti, as "klee-zesti -posix-runtime
>>         -libc=uclibc get_sign.bc 22", It would expect to explore only
>>         one branch, but I somehow end up exploring 10?
>>
>>         With Zesti (if anyone has any idea), I still end up exploring
>>         all 3 branches of the function.
>>         Does anyone have any clues on how to get this working?
>>         (Either KLEE or Zesti would be fine :))
>>
>>         Thank you,
>>         Regards,
>>         Bharat Garhewal,
>>         ICIS - SWS,
>>         Radboud University
>>         _______________________________________________
>>         klee-dev mailing list
>>         klee-dev at imperial.ac.uk <mailto:klee-dev at imperial.ac.uk>
>>         https://mailman.ic.ac.uk/mailman/listinfo/klee-dev
>>         <https://mailman.ic.ac.uk/mailman/listinfo/klee-dev>
>>
-------------- next part --------------
HTML attachment scrubbed and removed


More information about the klee-dev mailing list