[发明专利]增量代码的静态检测方法及检测系统有效
| 申请号: | 202210147761.4 | 申请日: | 2022-02-17 |
| 公开(公告)号: | CN114510722B | 公开(公告)日: | 2023-01-06 |
| 发明(设计)人: | 张世琨;高庆;王文祥;孙基男 | 申请(专利权)人: | 北京大学 |
| 主分类号: | G06F21/57 | 分类号: | G06F21/57;G06F21/56 |
| 代理公司: | 北京华创智道知识产权代理事务所(普通合伙) 11888 | 代理人: | 彭随丽 |
| 地址: | 100871*** | 国省代码: | 北京;11 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 增量 代码 静态 检测 方法 系统 | ||
1.增量代码的静态检测方法,其特征在于,针对原代码和任意变化后的待测代码,包含以下步骤:
识别待测代码的增量部分和无增量部分;
对待测代码构建抽象语法树;
根据所述抽象语法树构建所述待测代码的函数调用图,所述待测代码的函数调用图的构建方法为,将所述抽象语法树中定义的语法结构作为结构关系基础,与增量部分的函数调用图、初始静态检测结果的信息组合构建所述待测代码的函数调用图;
根据所述待测代码的函数调用图构建所述待测代码的值依赖图,所述待测代码的值依赖图的构建方法包括,分别构建增量部分值依赖图和无增量部分值依赖图,连接所述增量部分值依赖图和所述无增量部分值依赖图;
根据所述待测代码的值依赖图,得增量代码的静态检测结果。
2.根据权利要求1所述静态检测方法,其特征在于,识别所述待测代码的增量部分方法包括通过比较程序或命令;所述比较程序或命令包括Git中diff命令。
3.根据权利要求1所述静态检测方法,其特征在于,还包括步骤:对原代码进行静态分析,作为初始静态检测结果。
4.根据权利要求3所述静态检测方法,其特征在于,还包括步骤:将所述初始静态检测结果和所述增量代码的静态检测结果结合得到所述待测代码的静态检测结果。
5.根据权利要求4所述静态检测方法,其特征在于,所述增量部分的函数调用图由所述抽象语法树得出;所述初始静态检测结果的信息包括原代码的节点与边的信息。
6.根据权利要求5所述静态检测方法,其特征在于,以所述待测代码的函数调用图中的调用链关系,结合所述初始静态检测结果中的节点与边,连接所述增量部分和所述无增量部分。
7.根据权利要求6所述静态检测方法,其特征在于,所述无增量部分值依赖图构建方法为:无增量部分值依赖图从所述初始静态检测结果中得到。
8.根据权利要求7所述静态检测方法,其特征在于,所述增量部分值依赖图由值依赖图的生成方法生成,包括以下步骤:
进行非守卫值依赖分析;
守卫值依赖分析;
精化值依赖分析。
9.根据权利要求8所述静态检测方法,其特征在于,所述非守卫值依赖分析包含跨函数的模型效应分析。
10.根据权利要求9所述静态检测方法,其特征在于,所述守卫值依赖分析包含构建值依赖图的第一定义点与第二定义点之间的到达条件。
11.根据权利要求10所述静态检测方法,其特征在于,所述到达条件的构建方法包括:选取所述增量部分值依赖图的具体一条边,在所述待测代码的函数调用图上遍历由所述第一定义点到所述第二定义点来计算最终的约束值,进而使用分析算法计算所述第一定义点到所述第二定义点的条件。
12.根据权利要求11所述静态检测方法,其特征在于,所述精化值依赖分析包含进行值依赖图的精化构建、常量传播与常量折叠、对新的依赖关系的约减分析以及针对循环的约减分析。
13.根据权利要求12所述静态检测方法,其特征在于,所述增量代码的静态检测结果的构建方法为:
利用所述待测代码的值依赖图中包含增量部分的连通分支的集合,对所述连通分支的集合进行漏洞检测,得所述增量代码的静态检测结果。
14.根据权利要求13所述静态检测方法,其特征在于,所述连通分支的集合进行漏洞检测的方法包括:
基于现有知识建立缺陷模式约束;
对于所述初始静态检测结果进行区间分析,建立程序切片;
对于所述程序切片,和已知缺陷模式一一对应检测,确认程序中是否存在漏洞。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京大学,未经北京大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202210147761.4/1.html,转载请声明来源钻瓜专利网。





