[发明专利]C/C++程序中不可达代码的静态检测方法及系统有效
申请号: | 201811101415.2 | 申请日: | 2018-09-20 |
公开(公告)号: | CN109446066B | 公开(公告)日: | 2020-11-03 |
发明(设计)人: | 马森;张世琨;马骁;高庆;郜成胜 | 申请(专利权)人: | 北京大学;北京北大软件工程股份有限公司 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 北京路浩知识产权代理有限公司 11002 | 代理人: | 王莹;吴欢燕 |
地址: | 100871*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | c++ 程序 不可 代码 静态 检测 方法 系统 | ||
本发明实施例提供一种C/C++程序中不可达代码的静态检测方法及系统,其中,所述方法包括:构建待检测C/C++程序的控制依赖图和值依赖图;在所述值依赖图上进行常量分析,并根据常量分析的结果更新所述控制依赖图;对更新后的所述控制依赖图中所有守卫结点的约束表达式的可满足性进行求解;若存在不可满足的约束表达式,则从所述控制依赖图中获取与所述不可满足的约束表达式相对应的守卫结点的所有直接和间接后继结点所对应的程序代码。本发明可以检测千万行级的代码,检测速度可达到每小时百万行以上,并且检测精度超过利用符号执行技术的检测精度,具有较低的误报率和漏报率。
技术领域
本发明涉及程序分析技术领域,更具体地,涉及一种C/C++程序中不可达代码的静态检测方法及系统。
背景技术
不可达代码可以分为不可到达代码(Unreachable code)和不可行代码(Infeasible code)两类,其中,不可到达代码是指在语法上不允许被访问的代码;不可行代码是指在语法上允许被访问但是语义上可以保证无论给出什么输入,实际都不会到达的代码。也有人认为不可到达代码是一种特殊类型的不可行代码。现有技术已经可以检测第一类不可达代码——不可到达代码,并且能够保证检测是快速和精确的。
近年来有很多关于第二类不可达代码——不可行代码的自动检测技术的研究,由莱斯定理(Rice’s Theorem)可知,不可行代码的检测本质上是不可判定问题,即不存在一种检测方法可以自动检测出程序中的不可行代码,且不存在误报和漏报。因此这些研究都从不同角度做了权衡,可将现有的可达性分析技术按照分析方法分为以下四类:
模式匹配:首先提出几种常见的造成不可达代码的缺陷模式,然后通过在控制流图上匹配特定的模式检测不可达代码。约80%的不可达代码都是由固定的四到六种缺陷模式导致的,所以通过匹配这些缺陷模式,就可以检测出大部分不可达代码。
定理证明:将“找出所有不可达代码”问题转化成“找出所有可以被可行路径覆盖的语句”问题,然后再证明所有可行路径可以通过特定的最小子集重复的应用定理证明得到。
抽象解释:通过在控制流图上使用一系列的路径不敏感的前向和后向的抽象解释器运行结果,来发现控制流图中的路径是否可以在实际运行中被执行到。
符号执行:程序使用符号值而非具体输入作为程序输入,到达每个条件时得到相应的路径约束,然后通过约束求解器判断是否有具体值可以通过该条件,若没有则该条件下的代码则为不可达代码。
通过比较上述四种方法可以发现,定理证明方法最精确,能检测出程序中所有的不可达代码且没有误报,然而可检测规模太小,速度很慢,难以实际应用。模式匹配方法检测速度最快,但是有限的模式必然无法覆盖所有情况,存在大量的漏报。抽象解释方法漏报率略低于模式匹配,但是速度很慢。符号执行的优点在于可以检测规模很大的代码,速度也最快,因此实际应用最广。但是利用符号执行技术检测不可达代码,漏报率偏高且存在误报。
发明内容
为了解决在保证检测效率的基础上现有符号执行技术漏报率偏高和存在较多误报的问题,本发明实施例提供一种C/C++程序中不可达代码的静态检测方法及系统。
根据本发明实施例的第一个方面,提供一种C/C++程序中不可达代码的静态检测方法,包括:
构建待检测C/C++程序的控制依赖图和值依赖图;
在所述值依赖图上进行常量分析,并根据常量分析的结果更新所述控制依赖图;
对更新后的所述控制依赖图中所有守卫结点的约束表达式的可满足性进行求解;
若存在不可满足的约束表达式,则从所述控制依赖图中获取与所述不可满足的约束表达式相对应的守卫结点的所有直接和间接后继结点所对应的程序代码。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京大学;北京北大软件工程股份有限公司,未经北京大学;北京北大软件工程股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201811101415.2/2.html,转载请声明来源钻瓜专利网。