KLEE: 某用symbolic execution的方法来产生能够遍历不同程序路径的test cases的工具,可以找到bug。
编译
如果编译KLEE的时候说:
Bytecode libraries require LLVM capable compiler but none is available ****
那就是说,你的LLVM在configure的时候,没找到llvm-gcc。 基本上这是因为你没在编LLVM之前装llvm-gcc,或者装完了没加到path里去。 其实不加到path也可以,给configure加个参数,configure就不用自己到path里找llvm-gcc了。 加完了重新configure一下llvm,再编译安装就可以了。
重现
重现的时候可能碰到这个问题:
islower.c:(.text+0x3f): undefined reference to `klee_make_symbolic'
虽然你在链接里面已经加了libkleeRuntest.a。 如果你把它换成这个.a里那个唯一的.o,那就换个错误:
In function `klee_make_symbolic': klee/runtime/Runtest/intrinsics.c:76: undefined reference to `kTest_fromFile'
于是如果你再把KTest.o加进来,那就可以编译过……
问题在于:
1. 其实还依赖另一个.a,libkleeBasic.a
2. 顺序问题
我不知道为啥会有这个问题,或许以后会了解。反正现在知道的是,如果你用了.a的东西,你就要把.a放到后面。 所以要这么编译:
gcc islower.c klee/lib/libkleeRuntest.a klee/lib/libkleeBasic.a -Iklee/include/
然后就没问题了……