docker下 klee第一个测试

被测试的简单函数源文件位于  /klee_src/examples/get_sign 目录下

该源代码分为三个部分

第一个部分为被测试的函数

int get_sign(int x) {
  if (x == 0)
    return 0;

  if (x < 0)
    return -1;
  else
    return 1;
}

 第二个部分为主函数 

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

 klee_make_symbolic()函数可以将变量标记为符号 它有三个参数  1是变量的地址  2是变量的大小  三是符号名字(任意的)

由于klee是基于LLvm的  所有进行符号执行的第一步是要将c源代码转换为LLvm位代码 

clang -I ../../include -emit-llvm -c -g get_sign.c

 这会创建一个get_sign.bc 文件

 接下来就是运行klee在这个llvm代码上

klee get_sign.bc

 产生如下结果

 

 在klee-last中存在着生成的测试用例  这些测试用例是.ktest文件 使用ktest-tool工具可以查看  例如

ktest-tool klee-last/test000001.ktest

 

posted on 2019-03-20 11:03  Zhw_forever  阅读(1040)  评论(0编辑  收藏  举报