[发明专利]一种充分检测空指针引用缺陷的方法有效
申请号: | 201310141769.0 | 申请日: | 2013-04-22 |
公开(公告)号: | CN103218296A | 公开(公告)日: | 2013-07-24 |
发明(设计)人: | 金大海;宫云战;董玉坤;王雅文;黄俊飞 | 申请(专利权)人: | 北京邮电大学 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 北京派特恩知识产权代理事务所(普通合伙) 11270 | 代理人: | 张振伟;王黎延 |
地址: | 100876 *** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 充分 检测 指针 引用 缺陷 方法 | ||
1.一种充分检测空指针引用缺陷的方法,其特征在于,所述方法包括:
读取被测应用文件,对被测应用进行词法分析和语法分析,生成被测应用的抽象语法树,根据所述抽象语法树生成反映被测应用控制结构的控制流图,并根据所述抽象语法树创建被测应用的符号表系统及类型系统,基于抽象语法树识别出被测应用的全部可寻址表达式;
根据所述控制流图对被测应用进行保守的区间运算与指针分析,并根据区间运算与指针分析的结果,生成函数摘要;
根据所述函数摘要以及抽象语法树识别出全部的指针引用以及被引用的指针,并对每个被引用的指针创建空指针引用缺陷状态机实例;
基于所述控制流图运行空指针引用缺陷状态机实例,对于所述控制流图的每个节点,根据区间运算、指针分析的结果对每个缺陷状态机实例分别进行状态迁移,并确定空指针引用集合、安全指针引用集合、不确定的指针引用集合。
2.根据权利要求1所述的方法,其特征在于,所述基于抽象语法树识别出被测应用的全部可寻址表达式,包括:
基于抽象语法树识别出被测应用的所有定义的符号以及所有使用的可寻址表达式。
3.根据权利要求2所述的方法,其特征在于,所述基于抽象语法树识别出被测应用的所有使用的可寻址表达式,包括:
从抽象语法树上的后缀表达式节点识别所有使用的后缀表达式;
从抽象语法树上的一元表达式节点识别所有使用的指针引用表达式。
4.根据权利要求1所述的方法,其特征在于,所述根据控制流图对被测应用进行保守的区间运算与指针分析,包括:
A1、根据控制流图产生时的节点号顺序,取控制流图中的下一个节点作为当前节点,并在所述当前节点为最后一个节点时,结束当前处理;否则执行步骤A2;
A2、对所述当前节点上第一次出现的变量,用基于抽象内存区域的四元模型<Variable,Region,Expression,Domain>对所述变量进行建模,并根据所述变量的类型进行初始操作,并设置初始区间值;若变量的类型是指针,则设置所述变量指向集合为空;其中,Variable为被建模的所述变量,Region为为所述变量分配的抽象内存区域,Expression为符号表达式,Domain为取值区间;
A3、对所述当前节点的前驱节点上出现的除作用域的指针之外的每一个指针,确定每一个指针在所述当前节点的所有前驱节点上的指向集合的并集,得到指针在所述当前节点上的初始指向集合;其中,所述作用域为符号表系统中的作用域;
A4、对所述当前节点的前驱节点的除作用域的变量之外的每一个变量,确定每一个变量在所述当前节点的所有前驱节点上的取值区间的并集或区间集的并集,得到变量在所述当前节点上的初始取值区间或初始区间集;判断在所述当前节点上是否存在某个变量的初始取值区间或初始区间集为空,若存在,则标记该节点为矛盾节点,执行步骤A1;若不存在,则执行步骤A6;
A5、根据所述当前节点对应的语句类型,对该节点上每个已获得初始指向集合的指针进行保守的指针分析,对该节点上的每个已获得初始区间值或初始区间集的变量进行保守的区间运算,并执行A1。
5.根据权利要求4所述的方法,其特征在于,所述对所述变量进行建模,包括:
变量为数组元素时,还建立数组的Region与该变量Region的父子层次关系;变量为结构体或联合类型时,还建立结构体的Region或联合的Region与该变量的Region的父子层次关系;变量为指针类型时,还设置变量指向集合为空,设置变量初始状态为不确定unsure状态。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京邮电大学,未经北京邮电大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201310141769.0/1.html,转载请声明来源钻瓜专利网。
- 上一篇:一种混合对讲方法及系统
- 下一篇:一种四面取暖的多功能电暖桌