Klee
https://blog.csdn.net/vincent_nkcs/article/details/85224491
- 利用docker安装klee
现在(2021年11月)官网推荐是2.1版本的
klee官网
docker pull klee/klee
或指定tags, 例如指定2.1版本的
docker pull klee/klee:2.1
- 创建临时画像
exit退出临时画像 画像自动删除
docker run --rm -ti --ulimit='stack=-1:-1' klee/klee
exit
- 永久画像
docker run -ti --name=ws_klee --ulimit='stack=-1:-1' klee/klee
- 进入画像
docker start -ai ws_klee
- 删除画像
docker rm ws_klee
----------------分割线------------
- 画像提供了clang和LLVM工具,分别做编译c文件和将c文件转换字节码文件的工作,每个新建的画像中都有klee_build 和 klee_src两个文件夹,klee_src包含了构建KLEE的源码,klee_build是klee_src构建的工程。
- 我们能在klee_src中发现examples文件夹,其中包含了四个初始文件夹,分别是get_sign,islower,regexp,sort,每个文件夹里面包含一个同名c文件,是官方给出的测试代码例子
- 测试一个判断正负数的程序,打开前文提到的get_sign.c文件,可以看到测试函数get_sign和main函数。
- klee_make_symbolic是KLEE工具自带的测试函数,通过自定义的变量,不断产生值赋给a,以此完成自动生成样例功能。
- 编译该c文件:
clang -I …/…/include -emit-llvm -c -g get_sign.c - 同目录下生成了一个get_sign.bc字节码文件,然后进行测试:
klee get_sign.bc
- 其中klee-out-0是本次测试结果,klee-last是最新测试结果,每次测试后覆盖。
- klee-last中包含最新测试的缺陷说明和测试样例等文件