使用KLEE生成高代码覆盖率的测试用例

上传人:m**** 文档编号:559821934 上传时间:2022-11-20 格式:DOCX 页数:8 大小:50.28KB
返回 下载 相关 举报
使用KLEE生成高代码覆盖率的测试用例_第1页
第1页 / 共8页
使用KLEE生成高代码覆盖率的测试用例_第2页
第2页 / 共8页
使用KLEE生成高代码覆盖率的测试用例_第3页
第3页 / 共8页
使用KLEE生成高代码覆盖率的测试用例_第4页
第4页 / 共8页
使用KLEE生成高代码覆盖率的测试用例_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《使用KLEE生成高代码覆盖率的测试用例》由会员分享,可在线阅读,更多相关《使用KLEE生成高代码覆盖率的测试用例(8页珍藏版)》请在金锄头文库上搜索。

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

2、he 他已 E Dtx 哈 imiage ftjllingirom the- Det her HufrijTi jr 11.M ivrmnw 如Fy v图1 安装主页2.安装 docker(ubuntu)点击进入 ubuntu 版本的 docker 入口,如图 2.Installing DockerTonziDotkeryOumMcniWyOu Iia 豹 ae u琴 d (Ligo 3施rig:* wtn Da峥1 ihlT剑讯.Foim 丁朝 Ihrsfcrr=JJaLi?n irylHK即52 h 皿nth$、臼讯卅卜町US图 2 安装入口3安装 linux-image-extra-*包

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

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

5、e启动docker服务sudo service docker start验证安装是否成功,若显示如图3所示,则安装成功。sudodocker run hello-world0 S lUHUqjbuntu:desker ru4B?F5bdl44!5e: KKUXuvtiuntv;$ docker rm - th tl ultrnits1 steck= 1;rl1 klee/klre- 昶鄧机胖5ed4e 5e: -$图 4 klee 界面退出命令则是 :exit四、实验步骤1.选取目标函数函数 get_sign 如图 5 所示:int get_sign(int x) if (x = 0)retu

6、rn Q;if (x 0)return -1;elsereturn 1;图5目标函数2. 对目标函数进行插装对上述目标函数进行插装,得到源代码程序 get_sign.c打开/Home/klee/examples/get_sign 中的 get_sign.c,如图 6 所示: int get- s ign (int x.)- if = Oj return 0;if (x OJ return -1 ;lsreturn 1;int m且 in( i ii 匚 a;klee_make_synibol ic ( Em爭 sxzecf (a) / a );工壬七urn get_sign ( a);图 6

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

8、emit-llvm -c -g get_sign.c-I是为了让编译器可以找U头文件-g是为了增到调试信息到bit code文件中。结果如图 7:9时联四廿4胛峪 561 强5: -/iklw.irc/ffwmplifs/gfft.ElgnMeegfHfiJi:5615S5!-/klee_sre/examplesclang -I ,-/. ,/clud? -fRtt-llM n -c -g g?t_?t-gfl,ckleeigf4-flS!c 56159 5:-/klee_s rc/examples /flet_slgfiS Isqet_stgii, be get_51gn. cElLw0f4

9、4S9i: 5515S5 ;-/kl_s rc/txAnples /flrt_slgn5 |图 7 生成 LLVM 中间语言4.klee 进行符号执行用 klee 对编译后得到的中间语言进行符号执行,命令如下kleeget_sign.bcKLEE 符号执行后的输出信息如图8所示:Q -Id書書應銚何祜帖;-/WIm叱隍对mp诫*#書兀対乩kle?8f48?c5015S5:/kl_sfexanpics/g?t_5lgr$ claog -I */inlude -emtt-llv -c -g giet_si4i*i-,ckleer44&Src 561535:-fkl ee_s re/exanples

10、 /ge t_slgri$ Is gc-t_signii. be ge t_5ign.E.kle?ef-i!4B9c 515S5: -/klw_s rc f exBHples/ge t_5tor5 Ik I er oi?t_st-g(i beKLEEi output directory Is 1 /hoRe/klee/klee_src./esaflples/9?t_5Ign/Mee-&ut iKlifig SFP solder backendKLEE:也皿釘 tvt*!. inttrudricnc = 3Jkl;: cipleted paidc 3kJUEE: doner gt1erated=

11、 3kle?cf489-c 5015S5:-/kl _s/exanplts /gc t_5tgr$ 1 s get_stgn. be aetsign. ct ilfUt-cut-?kleer44&Src 561535:-fkl ee_s rc/exanples /ge t_slgri$ |图 8 klee 符号执行我们选取的get_sign函数,有三条路径。程序分别在a为0, a大 于0和a小于0时执行。KLEE将对所有三条路径进行探索,并且为每 一条路径生成一个包含具体值而非符号值的测试用例。5.查看生成的测试用例信息每当命令 klee 执行一次(注:针对不同或相同的 LLVM 中间字节 码

12、执行),就会在当前目录下生成一个 klee 执行后的信息统计文件 并且有一个快捷方式klee-last,指向最新一次因klee执行而生成的目 录 klee-out-X。在klee-last指向的目录中的文件如图9所示:kleei!4Sgc5615B5!k lee_rc/examples/ get_st Is klae-last flssenblyrll messages.tut run.statstest00&O2.ktest Mornings rtstinforun. tstatstestBflDODlktest testBaB&Dl. Ictestkl亡縫f4469工5E5:-/ kl 亡亡_专r

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号