[发明专利]一种缓解路径爆炸的动态符号执行方法有效

专利信息
申请号: 201210106958.X 申请日: 2012-04-13
公开(公告)号: CN102708045A 公开(公告)日: 2012-10-03
发明(设计)人: 张小松;陈厅;吉小丽;朱聪;侯浩俊 申请(专利权)人: 电子科技大学
主分类号: G06F11/36 分类号: G06F11/36
代理公司: 成都华典专利事务所(普通合伙) 51223 代理人: 徐丰;杨保刚
地址: 611731 四川省成*** 国省代码: 四川;51
权利要求书: 查看更多 说明书: 查看更多
摘要:
搜索关键词: 一种 缓解 路径 爆炸 动态 符号 执行 方法
【说明书】:

技术领域

      本发明属于计算机软件安全测试领域,提供了一种缓解路径爆炸的动态符号执行方法。

背景技术

   软件测试是验证软件质量最通用的技术。高质量的软件产品需求,促使软件测试在软件开发周期中占据越来越重要的地位。近几年发展起来的动态软件测试避免了静态软件测试人工开销大、效率低、误报率高等缺点,成为当前软件测试的主要方式。动态符号执行是动态软件测试的重要技术之一,其通过自动生成测试用例以获取高代码覆盖率,被用于当前许多主流动态软件测试工具中。例如NASA的PathFinder,斯坦福大学的KLEE,伯克利大学的CREST,微软的SAGE、Pex、Prefix等测试软件采用的都是动态符号执行技术。利用动态符号执行自动生成测试用例,在理论上能够实现对被测程序全路径的覆盖,从而全面、精确的检测程序中潜在的漏洞。

   动态符号执行通过对被测程序插装,跟踪抽象符号而非实际输入值来分析程序。在首次执行时,由用户提供输入测试用例,将输入数据符号化,符号执行伴随程序的实际执行,跟踪输入数据的流通,同时更新相应的符号,在路径分支处搜集与输入符号相关的分支转移条件表达式。一次执行过程中搜集到的条件表达式的“与”组成路径约束条件。该路径约束条件的解集与该路径有一一对应的关系。对路径约束条件的某条路径取反并用求解器求解,求解得到的数据作为新测试用例输入,能够驱动下次测试执行不同的路径,如此,直到所有的可执行路径都被测试完,最终达到对被测程序的全路径覆盖测试。

动态符号执行的实际执行过程可用示例1简单说明,首先解释一次符号执行的过程。假设x,y是输入值,符号执行分别将其对应为符号                                               ,。如果初次执行对(x,y)提供的输入值为(1000,503),则执行路径为:1→2→3→4→5→6→10,第3行if条件语句得到的条件表达式为=1000,第4行的为<2*。该次执行的路径约束条件将为:(=1000)ù(<2*),解集为:=1000,={501,502…}。任意解集的集合(如(1000,501),(1000,502),(1000,504)等)作为输入都可使程序沿该路径执行,但用SMT求解器求解只能得到能满足该表达式的一组数据。

1.    void f(int x, int y) {

2.      int z = 2*y;

3.      if (x == 1000) {

4.         if (x < z) {

5.             assert(0); /* error */

6.         }

7.       }else{

8.         ……

9.       }

10.             }

示例 简单程序符号执行示例

   对路径约束条件中的每个条件表达式进行取操作,可以求得可执行其它分支路径的输入数据。如对第3行的约束条件取反,并保留它之前的条件表达式(该示例没有),将其后的表达式去掉,得到的条件表达式为!=1000。该预测路径约束条件的解可使程序沿第一个if语句的else分支执行。这里的解集为 !=1000,为任意值,求得的解可能是(x=0,y=503)。利用以上方式,可以得到程序任何可执行路径对应的输入数据,即测试用例,测试程序的所有可达路径。

   如果采用一般的动态随机测试,给x,y赋予随机值,则要检测出第5行的错误,需要大量的无关测试,因为要保证随机取值x的值为1000,并且x<2*y这个概率还是很小的。而采用动态符号执行最多需要3次,如图1所示。从图中可以看出,如果第一次的输入值为(x=0,y=0),第一次实际执行完后搜集到的路径约束条件为!=1000,对表达式取反得=1000,用求解器求解后得x=1000,用该值更新测试用例作为第二次的输入(x=1000,y=0)。第二次实际执行完后搜集到的路径约束条件为  =1000)ù( >=2*,对表达式取反得Sx=1000)ù(Sx<2*Sy(第一条表达式不需要反复取反),求解后得到一组满足该表达式的解(x=1000,y=501)作为下一次的输入。第三次实际执行即可触发第5行的assert(0)错误。

下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。

该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于电子科技大学,未经电子科技大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服

本文链接:http://www.vipzhuanli.com/pat/books/201210106958.X/2.html,转载请声明来源钻瓜专利网。

×

专利文献下载

说明:

1、专利原文基于中国国家知识产权局专利说明书;

2、支持发明专利 、实用新型专利、外观设计专利(升级中);

3、专利数据每周两次同步更新,支持Adobe PDF格式;

4、内容包括专利技术的结构示意图流程工艺图技术构造图

5、已全新升级为极速版,下载速度显著提升!欢迎使用!

请您登陆后,进行下载,点击【登陆】 【注册】

关于我们 寻求报道 投稿须知 广告合作 版权声明 网站地图 友情链接 企业标识 联系我们

钻瓜专利网在线咨询

周一至周五 9:00-18:00

咨询在线客服咨询在线客服
tel code back_top