I didn't have time to check this, but it should work by adding a call to
klee_define_fixed_object(<my ptr>, <my ptr size>) in the program, somewhere
before <my ptr> is dereferenced. See lib/Core/SpecialFunctionHandler.cpp for
the intrinsic implementation.
Paul
On 5 Dec 2011, at 16:06, arrowdodger wrote:
> Hello. I've compiled this code into bytecode:
>
> void foo(int * a) { printf("%d",a); }
> void main() { foo(NULL) }
>
> After that, i've hacked klee's main.cpp so after loading bitcode from the
> file, it replaces foo(NULL) call with foo(<my ptr>), where <my ptr> is
> IntToPtrInst pointing to klee's process heap:
>
> char * mem = new char;
> fooCallInst->setArgOperand(0, new IntToPtrInst(...));
>
> To be sure, i'm dumping whole module and @main looks like this:
>
> define i32 @main() nounwind uwtable {
> entry:
> %retval = alloca i32, align 4
> store i32 0, i32* %retval
> %0 = inttoptr i64 34397700356 to i32*
> call void @foo(i32* %0)
> ret i32 0
> }
>
> which is ok. But during execution i get
> KLEE: ERROR: memory error: out of bound pointer
> KLEE: NOTE: now ignoring this error at this location
>
> I suppose, this memory location isn't registered within klee's memory
> manager, or something like this. So, what should i hack to make it work? And
> is this possible at all? Would it be possible to symbolicaze such memory?
> _______________________________________________
> klee-dev mailing list
> [email protected]
> http://keeda.Stanford.EDU/mailman/listinfo/klee-dev
_______________________________________________
klee-dev mailing list
[email protected]
http://keeda.Stanford.EDU/mailman/listinfo/klee-dev