[发明专利]源代码静态分析方法在审
| 申请号: | 202010035928.9 | 申请日: | 2020-01-09 |
| 公开(公告)号: | CN111240982A | 公开(公告)日: | 2020-06-05 |
| 发明(设计)人: | 黄滟鸿;郭旺;史建琦;蔡方达;郭欣;石奇 | 申请(专利权)人: | 华东师范大学;上海丰蕾信息科技有限公司 |
| 主分类号: | G06F11/36 | 分类号: | G06F11/36 |
| 代理公司: | 北京辰权知识产权代理有限公司 11619 | 代理人: | 付婧 |
| 地址: | 200062 上*** | 国省代码: | 上海;31 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 源代码 静态 分析 方法 | ||
1.一种源代码静态分析方法,其特征在于,包括:
对源代码进行词法分析和语法分析,生成抽象语法树;
对所述抽象语法树进行语义分析,得到有向控制流图和数据流图;
对所述有向控制流图进行遍历,获取切片数据;
根据所述数据流图和所述切片数据,查找并输出所述源代码中可能存在缺陷的变量。
2.根据权利要求1所述的方法,其特征在于,所述词法分析包括:
对所述源代码进行扫描,根据构词规则,采用正则表达式来识别所述源代码中的有用部分作为词法单元,产生由词法单元构成的序列;
将所述由词法单元构成的序列与预定义的缺陷序列进行匹配,将所述源代码中匹配成功的缺陷部分找出来并删除所述缺陷部分。
3.根据权利要求2所述的方法,其特征在于,所述语法分析包括:将经过所述词法分析的源代码按照语法规则转化成语句单元,构建抽象语法树。
4.根据权利要求1所述的方法,其特征在于,所述对所述抽象语法树进行语义分析,得到有向控制流图和数据流图,包括:
定义所述抽象语法树的不同类型的节点,基于所述节点利用文法结构推导出所述抽象语法树中的语句;
对所述语句进行控制流分析和数据流分析,生成有向控制流图和数据流图。
5.根据权利要求1所述的方法,其特征在于,所述对所述有向控制流图进行遍历,获取切片数据,包括:
对所述有向控制流图的控制流指针进行分析,以指针作为参数和返回值,通过指针分析确定调用对象,通过所述调用对象确定新的指向关系,将传参和返回值赋值都作为指针赋值操作进行分析;采用路径敏感方法收集路径约束条件和变量约束条件的信息,得到所述切片数据。
6.根据权利要求1所述的方法,其特征在于,所述根据所述数据流图和所述切片数据,查找并输出所述源代码中可能存在缺陷的变量,包括:根据分类安全规则集,结合抽象解释方法对所述数据流图和所述切片数据进行静态分析,查找出所述源代码中可能存在缺陷的变量并将其输出。
7.根据权利要求1所述的方法,其特征在于,所述对所述有向控制流图进行遍历,包括:采用深度优先的遍历算法遍历所述控制流程图的各条分支路径,在每一条所述分支路径上,针对外部输入数据或者变量的值无法确定的情况,采用符号值替换的方式,将所述分支路径上对应的变量、参数和返回值进行符号替换。
8.根据权利要求1所述的方法,其特征在于,在所述对源代码进行词法分析和语法分析,生成抽象语法树之前,所述方法还包括预处理的步骤。
9.根据权利要求8所述的方法,其特征在于,所述预处理的步骤包括:滤掉源程序中的注释和空白,得到预处理后的源代码。
10.根据权利要求1所述的方法,其特征在于,所述有向控制流图包括节点以及节点间的有向边,其中,所述节点表示基本代码块,所述节点间的有向边代表控制流路径,所述有向边中的反向边代表可能存在的循环。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于华东师范大学;上海丰蕾信息科技有限公司,未经华东师范大学;上海丰蕾信息科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202010035928.9/1.html,转载请声明来源钻瓜专利网。





