使用KLEE生成高代码覆盖率的测试用例_第1页
使用KLEE生成高代码覆盖率的测试用例_第2页
使用KLEE生成高代码覆盖率的测试用例_第3页
使用KLEE生成高代码覆盖率的测试用例_第4页
使用KLEE生成高代码覆盖率的测试用例_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、使用KLEE生成高代码覆盖率的测试用例一、实验目的本实验可以帮助学生了解动态符号执行工具KLEE的基本功能,为进一步研究符号执行技术的理论与应用提供基础。二、实验内容及环境本实验展示如何利用klee对一个被测目标函数进行符号执行,覆盖全部路径,并生成测试用例的具体操作流程。实验虚拟机为Ubuntu 16.04.1 LTS 64位操作系统。三、klee安装1.进入安装主页klee网站http:/klee.github.io/中有相关的安装方法,点击Use KLEE Docker image进入。如图1。图1 安装主页2.安装docker(ubuntu)点击进入ubuntu版本的docker入口,

2、如图2.图2 安装入口3.安装linux-image-extra-*包更新包管理器sudo apt-get update安装命令包sudo apt-get install linux-image-extra-$(uname -r) linux-image-extra-virtual4.更新apt源更新包信息一些准备工作,逐条输入指令即可,不再展开介绍。sudo apt-get update sudo apt-get install apt-transport-https ca-certificatessudo apt-key adv -keyserver hkp:/ha.pool.sks-:8

3、0 -recv-keys 58118E89F3A912897C070ADBF76221572C52609D更新apt源打开 /etc/apt/sources.list.d/docker.list 文件,没有就创建一个,里面加一句话,如下:gedit /etc/apt/sources.list.d/docker.list输入deb /repo ubuntu-xenial main并将文本保存。更新软件源sudo apt-get update确定APT连接的是正确的仓库apt-cache policy docker-engine5.安装最新版

4、本docker安装dockersudo apt-get install docker-engine启动docker服务sudo service docker start验证安装是否成功,若显示如图3所示,则安装成功。sudo docker run hello-world图3 docker安装成功6.下载KlEE镜像docker pull klee/klee7.运行KLEE镜像docker run -rm -ti -ulimit='stack=-1:-1' klee/klee进入到klee操作界面,如图4:图4 klee界面退出命令则是:exit四、实验步骤1.选取目标函数函数g

5、et_sign如图5所示:图5 目标函数2.对目标函数进行插装对上述目标函数进行插装,得到源代码程序get_sign.c打开/Home/klee/examples/get_sign中的get_sign.c,如图6所示:图6 源代码程序其中,klee_make_symbolic函数将某一个变量符号化。该函数需要三个参数:符号变量地址,符号变量占用内存字节,和它所采用的符号名称。由于klee相关可执行文件在klee目录下,所以将get_sign.c放到/Home/klee目录下。3.编译成LLVM中间语言KLEE在LLVM中间语言字节码上进行操作。我们要使用clang -I ././include

6、 -emit-llvm -c -g get_sign.c将源码get_sign.c编译成LLVM中间语言,得到get_sign.bc文件。命令如下:clang -I ././include -emit-llvm -c -g get_sign.c-I是为了让编译器可以找到<klee/klee.h>头文件-g是为了增到调试信息到bitcode 文件中。结果如图7:图7 生成LLVM中间语言4.klee进行符号执行用klee对编译后得到的中间语言进行符号执行,命令如下:klee get_sign.bcKLEE符号执行后的输出信息如图8所示:图8 klee符号执行我们选取的get

7、_sign函数,有三条路径。程序分别在a为0,a大于0和a小于0时执行。KLEE将对所有三条路径进行探索,并且为每一条路径生成一个包含具体值而非符号值的测试用例。5.查看生成的测试用例信息每当命令klee执行一次(注:针对不同或相同的LLVM中间字节码执行),就会在当前目录下生成一个klee执行后的信息统计文件。并且有一个快捷方式klee-last,指向最新一次因klee执行而生成的目录klee-out-X。在klee-last指向的目录中的文件如图9所示:图9 klee-last目录在klee执行信息目录下的以“.ktest”为后缀名的文件中,包含有klee产生的测试用例。在对get_sig

8、n函数进行符号执行以后,产生了三个测试用例,分别位于test000001.ktest,test000002.ktest,test000003.ktest文件中。在klee-last目录下用命令行键入如下命令:ktest-tool -write-ints klee-last/test000001.ktest显示test000001.ktest文件如图10所示:(该测试用例是执行x>0时的路径得来)图10 test000001.ktest文件内容更新命令,显示test000002.ktest文件如图11所示:(该测试用例是执行x=0时的路径得来)图11 test000002.ktest文件内容更新命令,显示test000003.ktest文件如图12所示:(该测试用例是执行x=0时的路径得来)图12test000003.ktest文件内容XXX.ktest文件指出命令行中用klee调用.o文件执行时所传递的参数(klee在的执行get_sign时传递的参数就是get_sign.o自身),当前生成的测试用例所对应的路径在执行时被符号化的对象的个数,被符号化对象的名字、字节大小

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论