[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:58:48 GMT 2021
Ah, so if I want the constraints while referring to the variable and not
just the value, we will have to parse the smt2 file?
If so, that will pose a problem for our use-case, since we want to parse
the constraints and then feed them to our tool.
I suppose I should start digging around in the KLEE source then, any
tips? :)
Thank you,
Bharat
On 23/03/2021 11:51, Ridwan Shariffdeen wrote:
> The current format supported is in smt2, so use --write-smt2s which
> will produce a smt2 file
>
>
> On Tue, Mar 23, 2021 at 6:46 PM Bharat Garhewal <b.garhewal at cs.ru.nl
> <mailto:b.garhewal at cs.ru.nl>> wrote:
>
> 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