【项目学习】运行KLEE的tutorial one

首先进入目录: 

cd klee_src/examples/get_sign

 可以注意下这个例子中是如何make symbolic的:

int main() {
  int a;
  klee_make_symbolic(&a, sizeof(a), "a");
  return get_sign(a);
}

然后编译到LLVM的字节码: 

clang -I ../../include -emit-llvm -c -g -O0 -Xclang -disable-O0-optnone get_sign.c

 -I:保证可以找到klee/klee.h

-g:可以看到debug信息

-disable-O0-optnone 传递给KLEE的位码不应该被优化,因为我们手工为KLEE选择了正确的优化,可以通过KLEE的--optimize选项启用。而在本例中应该使用-O0 -Xclang -disable-O0-optnon

klee get_sign.bc

出现下图界面:

说明klee生成了三条测试路径,每条路径有一个测试用例。且klee生成了输出文件夹klee-out0N.

如果我们想查看测试用例,可以按照下面指令进行:

ls klee-last

然后用klee-tools查看测试用例:

ktest-tool klee-last/test000001.ktest

走到这一步差不多就学会了怎么用klee自动生成测试用例了。但是官网的tutorial还给了一个replay library可以简单地用一个调用覆盖掉klee_make_symbolic。只要用动态库libkleeRuntest链接一下就可以了。

但是我走到这一步有报错:

然后参考了这个教程(13条消息) KLEE学习——实例1_ChaosLee_的博客-CSDN博客

原来是我的路径设置有问题,不可以直接

export LD_LIBRARY_PATH=path-to-klee-build-dir/lib/:$LD_LIBRARY_PATH
#这是错的!!!

这里的path-to-klee-build-dir是要具体的你的build地址,一般默认都是/home/klee/klee_build,所以要输入的是:

export LD_LIBRARY_PATH=/home/klee/klee_build/lib/:$LD_LIBRARY_PATH
gcc -I …/…/include -L /home/klee/klee_build/lib/ get_sign.c -lkleeRuntest

然后就欧克啦!然后可以看到第一次a=0时候返回值为0,第二次a=16843009返回值为1;第三次a=-2147483648,返回值为-1(这里转换到了0-255范围,因此为255)。

然后我们的tutorial 1就圆满结束了!

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值