[发明专利]基于控制流分析和数据流分析的Java程序静态分析方法在审
| 申请号: | 201510953537.4 | 申请日: | 2015-12-17 |
| 公开(公告)号: | CN105608003A | 公开(公告)日: | 2016-05-25 |
| 发明(设计)人: | 王旭;杨超;孙聪;马建峰;纪倩;张邦元;金方圆;张鹏 | 申请(专利权)人: | 西安电子科技大学 |
| 主分类号: | G06F11/36 | 分类号: | G06F11/36 |
| 代理公司: | 陕西电子工业专利中心 61205 | 代理人: | 王品华;王喜媛 |
| 地址: | 710071*** | 国省代码: | 陕西;61 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 基于 控制 分析 数据流 java 程序 静态 方法 | ||
1.一种基于控制流分析和数据流分析的Java程序静态分析方法,包括:
(1)使用开源工具Soot,将Java源程序转化为Jimple语言的中间表示形式,并对中间表 示形式进行数据结构的拆分,建立抽象语法树,生成控制流图;
(2)将Java程序静态分析问题抽象为过程间分布式子集问题IFDS,并以过程间分布式 子集问题IFDS求解器的方式表示该过程间分布式子集问题IFDS;
(3)定义过程间分布式子集问题IFDS求解器的接口类:
3a)规定过程间分布式子集问题IFDS求解器接口类参数的形式,即用字母N表示节点 参数,用字母D表示数据参数,用字母M表示方法参数,用字母V表示值参数,用字母G 表示控制流图参数;
3b)规定过程间分布式子集问题IFDS求解器的类接口的名称为:
IFDSSlover<N,D,M,V,G>;
3c)规定过程间分布式子集问题IFDS求解器的类接口IFDSSlover<N,D,M,V,G>中包含 有如下四个功能函数:数据流函数FlowFunctions<N,D,M>,控制流图函数 interproceduralCFG(),初始化种子函数initialSeeds(),零值表示函数zeroValue();
(4)在数据流函数FlowFunctions<N,D,M>中设置数据流分析规则:
4a)规定控制流图上节点的类型包括:普通节点,调用节点及返回节点;
4b)根据节点的类型规定节点之间边的类型:
若当前节点为普通节点,且当前节点的下一个节点为普通节点,则规定这两个节点之间 边的类型为普通边;
若当前节点为调用节点,且当前节点的下一个节点为普通节点,则规定这两个节点之间 边的类型为调用边;
若当前节点为返回节点,且当前节点的下一个节点为普通节点,则规定这两个节点之间 边的类型为返回边;
若当前节点为调用节点,且当前节点的下一个节点为返回节点,则规定这两个节点之间 边的类型为调用返回边;
4c)根据边的类型确定边上数据流分析的不同操作规程:
对于普通边的操作是:先执行对应的控制流图边上的程序,再以数据等量赋值或数据空 值截流的方式,将当前节点的数据传递给当前普通节点的下一个普通节点;
对于调用边的操作是:先执行对应的控制流图边上的程序,再以变量名称替换和数据等 量赋值的方式,将当前节点的数据传递给当前调用节点的下一个普通节点;
对于返回边的操作是:先执行对应的控制流图边上的程序,再以变量名称替回和数据等 量赋值或数据空值截流的方式,将当前节点的数据传递给当前返回节点的下一个普通节点;
对于调用返回边的操作是:先执行对应的控制流图边上的程序,再以数据等量赋值或数 据空值截流的方式,将当前节点的数据传递给返回节点。
(5)运行过程间分布式子集问题IFDS求解器接口类IFDSSlover<N,D,M,V,G>,在控制流 图的基础上进行数据流分析:
5a)将控制流图传递给过程间分布式子集问题IFDS求解器接口类 IFDSSlover<N,D,M,V,G>中的控制流图参数G,再通过控制流图参数G将控制流图填充到控 制流图函数interproceduralCFG()中;
5b)初始化种子函数initialSeeds(),即以控制流图的第一个节点为起始节点,生成初始 化种子,从初始化种子节点开始按照控制流图的执行逻辑,应用数据流分析规则,进行数据 流分析;
5c)执行(4)数据流规则,根据步骤4c)数据流操作规程中的数据传递方式,确定具 体的值传递操作方式:
若传递方式为数据等量赋值,则直接将该值传递给下一个节点;
若传递方式为数据空值截流,则先调用零值表示函数zeroValue()将空值转化为空值符号 NULL,再将该空值符号NULL传递给下一个节点;
5d)判断当前节点传递给下一个节点是否成功:
若当前节点的下一个节点正确接收当前节点传递的等量值或空值符号NULL,则当前 节点传递给下一个节点成功,跳转到步骤5e);
若当前节点的下一个节点不能正确接收当前节点传递的等量值或空值符号NULL,则 当前节点传递给下一个节点失败,退出数据流分析;
5e)判断当前节点的下一个节点是否为最后一个节点:
若当前节点的下一个节点不是最后一个节点,则从当前节点的下一个节点开始,返回 5c);
若果当前节点的下一个节点是最后一个节点,则数据流分析完成,输出最终结果。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于西安电子科技大学,未经西安电子科技大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201510953537.4/1.html,转载请声明来源钻瓜专利网。
- 上一篇:一种自动化测试方法及系统
- 下一篇:一种应用测试的监控方法和装置





