程序代码级内存缺陷漏报分析及解决方法与流程

文档序号:11918015阅读:217来源:国知局
程序代码级内存缺陷漏报分析及解决方法与流程

本发明涉及软件静态分析技术,尤其涉及基于静态分析的缺陷检测。



背景技术:

静态分析是软件测试方法的一种类型,其目的是通过静态的分析软件是否遵守预定的要求,是保证软件质量的重要一环。静态分析也被称为静态测试,不实际运行被测的软件,而是通过扫描源程序,从中找出可能导致错误的结构异常、控制流异常及数据流异常等情况。

缺陷检测是一类静态分析技术,可以静态的检测出程序中不符合语法或语义要求的缺陷。其中代码级内存缺陷是一类违背对内存读写正常语义的缺陷,不符合预定的内存读写要求,常见的代码级内存缺陷有:空指针引用、非法计算、缓冲区溢出、数组越界、变量未初始化使用、内存泄露、资源泄露等。

代码级内存缺陷的检测依赖于对程序语义分析,通过检测每个程序点上的存储状态是否符合正确的内存读写语义要求进行判定。但因为程序的复杂性,静态分析只能获得程序点上存储状态近似的结果,其结果不能是既是可靠的又是完备的,其中不可靠的结果会导致漏报;而且代码级内存缺陷检测对象识别的不全面以及判定准则的不准确也会导致漏报。



技术实现要素:

有鉴于此,本发明的主要目的在于首先分析导致代码级内存缺陷漏报的因素,并针对漏报的因素提出了相应的解决方法。

基于缺陷模式进行缺陷检测可能导致代码级内存缺陷漏报的因素有:

1、未定义相应的代码级内存缺陷模式。未全面考虑所有可能的代码级内存缺陷。

2、代码级内存缺陷检测对象识别不全面。虽然定义了相应的代码级内存缺陷模式,但是未全面考虑该类代码级内存缺陷出现的情况。

3、对变量的存储状态描述不全面。代码级内存缺陷的产生大多是变量的存储状态或者访问违背了正常语义或安全内存访问的要求,而变量间存在着各种关联关系,如果对变量的存储状态以及变量间的关联描述的不全面,将必然导致分析得到的变量存储状态的既不能满足可靠性也不能满足完备性,不能满足可靠性将必然导致某些代码级内存缺陷漏报。

4、数据流分析不可靠。因为程序的复杂性,大多数数据流分析难以保证可靠性。程序的复杂性主要表现在:变量间存在各种关联、复杂的控制结构、函数调用。这些复杂特性将导致难以可靠的分析出在每个程序点上的变量存储状态。

5、代码级内存缺陷判定规则不正确。基于数据流分析的结果对识别的代码级内存缺陷检测对象进行检测,可能因为语句副作用等因素导致不能获得程序点上检测对向的存储状态,导致不能正确的判定是否产生了代码级内存缺陷。

针对上述导致代码级内存缺陷漏报的因素,本发明提出了具有针对性的解决办法以实现代码级内存缺陷的零漏报,具体的技术方案是这样实现的:

1、一种代码级内存缺陷漏报分析及解决方法,其特征在于,该解决方法包括以下几个步骤:

A、总结程序中各类代码级内存缺陷,并归纳出相关的缺陷模式;

B、应用抽象内存模型描述内存对象的存储,并采用抽象域表示表达式的取值;

C、可靠的数据流分析,获得每个程序点上每个内存对象取值的上近似;

D、基于缺陷模式规则与数据流分析的结果,充分识别代码级内存缺陷检测对象;

E、基于缺陷模式规则与数据流分析的结果,准确的判定代码级内存缺陷检测对象是否是缺陷。

2、根据权利要求1所述的代码级内存缺陷漏报分析及解决方法,其特征在于,所述步骤A中的总结程序中各类代码级内存缺陷,并归纳出相关的缺陷模式的具体过程如下:

A1、对程序中各种违背语义的情况进行归纳,总结为各种缺陷模式;

A2、归纳汇总出每种缺陷模式可能导致代码级内存缺陷的因素;

A3、将缺陷模式进行标准形式的封装,以供后续缺陷检测使用。

3、根据权利要求1所述的代码级内存缺陷漏报分析及解决方法,其特征在于,所述步骤B中的应用抽象内存模型描述内存对象的存储,并采用抽象域表示表达式的取值的具体过程如下:

B1、提出一种抽象内存模型,能够描述程序中出现的各种类型内存对象以及表达式间的各种关联;

B2、应用抽象域描述标量表达式的取值;

4、根据权利要求1所述的代码级内存缺陷漏报分析及解决方法,其特征在于,所述步骤C中的可靠的数据流分析,获得每个程序点上每个内存对象取值的上近似的具体过程如下:

C1、应用流敏感、域敏感的数据流迭代的分析策略,以每个函数为数据流分析的单元进行分析;

C2、采用符号化函数摘要实现上下文敏感的过程间分析;

5、根据权利要求4所述的可靠的数据流分析,获得每个程序点上每个内存对象取值的上近似,其特征在于,所述步骤C2中的采用符号化函数摘要实现上下文敏感的过程间分析的具体过程如下:

C2.1、对每个函数进行数据流分析后,生成符号化函数摘要;

C2.2、对每个函数调用,获得被调用函数的符号化函数摘要,并根据调用点处的上下文环境进行符号化函数摘要的实例化;

6、根据权利要求1所述的代码级内存缺陷漏报分析及解决方法,其特征在于,所述步骤D中的基于缺陷模式规则与数据流分析的结果,充分识别代码级内存缺陷检测对象的具体过程如下:

D1、基于各种代码级内存缺陷呈现时所具有的语法特征,根据预处理后的程序识别出初始检测对象;

D2、根据数据流分析的结果,分析出每个初始检测对象对应的代码级内存缺陷检测对象及检测点;

7、根据权利要求1所述的代码级内存缺陷漏报分析及解决方法,其特征在于,所述步骤E中的基于缺陷模式规则与数据流分析的结果,准确的判定代码级内存缺陷检测对象是否是缺陷的具体过程如下:

E1、对于代码级内存缺陷检测点,基于数据流分析结果获得代码级内存缺陷检测对象的存储状态;

E2、基于代码级内存缺陷模式,判定该代码级内存缺陷检测对象的存储状态是否符合该类代码级内存缺陷模式。

本发明所提供的代码级内存缺陷漏报分析及解决方法,具有以下优点:

应用代码级内存缺陷检测方法,能够消除代码级内存缺陷的漏报,本发明能够保证代码级内存缺陷检测的充分性的原理在于:

1、代码级内存缺陷模式总结的充分性。充分的总结代码级内存缺陷模式,归纳总结出程序中各种可能的代码级内存缺陷及它们出现的可能情况。

2、表达式存储状态描述的全面性。全面的描述表达式存储状态,采用抽象域描述表达式的取值,采用内存模型表示表达式间的各种关联。

3、数据流分析的可靠性。分析获得每个程序点上每个内存对象取值的上近似,以及表达式间的各种可能关联。

4、代码级内存缺陷检测对象识别的完全性。基于对被测程序的预处理以及数据流分析的结果,根据总结的代码级内存缺陷模式规则,识别出全部的代码级内存缺陷检测对象。

5、代码级内存缺陷检测标准的准确性。根据总结的代码级内存缺陷模式规则以及数据流分析的结果,准确的检测每一个代码级内存缺陷检测对象是否违背了对内存读写的正确语义规则。

附图说明

图1、代码级内存缺陷检测流程示意图

图2、可靠的数据流分析示意图

图3、对每个函数进行流敏感、域敏感的数据流分析的过程示意图

图4、代码级内存缺陷检测对象识别示意图

图5、代码级内存缺陷检测对象判定示意图

具体实施方式

本专利的方法进行代码级内存缺陷检测时首先对被测程序进行预处理,得到抽象语法树、符号表、定义使用链、控制流图等程序的中间表示;然后基于控制流图进行可靠的数据流分析,得到每个程序点上用抽象内存模性描述的内存对象的存储状态;再基于数据流分析的结果与代码级内存缺陷模式的规则,充分识别出代码级内存缺陷检测对象;最后,基于数据流分析的结果与代码级内存缺陷模式的规则,准确的判定识别出的代码级内存缺陷检测对象是否是缺陷。

以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。

图1为本发明的代码级内存缺陷检测流程示意图,该方法包括如下步骤:

步骤A、对被测程序进行预处理,得到抽象语法树、符号表、定义使用链、控制流图等中间表示;

步骤B、可靠的数据流分析,获得每个程序点上每个内存对象取值的上近似;

步骤C、基于缺陷模式规则与数据流分析的结果,充分识别代码级内存缺陷检测对象;

步骤D、基于缺陷模式规则与数据流分析的结果,准确的判定代码级内存缺陷检测对象是否是缺陷。

其中所属步骤B可靠的数据流分析的过程如图2所示,具体分以下步骤:

步骤B.1、对每个函数进行流敏感、域敏感的数据流分析,获得该函数每个程序点上每个内存对象由抽象内存模性描述的存储上近似;

步骤B.2、基于该函数数据流分析的结果,生成该函书的符号化函数摘要;

其中所属步骤B.1对每个函数进行流敏感、域敏感的数据流分析的过程如图3所示,具体分以下步骤:

步骤B.1.1、取一个控制流图节点作为待处理节点,

步骤B.1.2、如果该控制流图节点有函数调用,转步骤B.1.3,否则,转步骤B.1.5;

步骤B.1.3、获得被调用函数的符号化函数摘要,基于调用点的上下文环境对符号化函数摘要进行实例化;

步骤B.1.4、基于实例化后的函数摘要对调用点处进行数据流更新;

步骤B.1.5、对该节点的迁移操作进行处理。

其中所属步骤C充分识别代码级内存缺陷检测对象的过程如图4所示,具体分以下步骤:

步骤C.1、基于各种代码级内存缺陷呈现时所具有的语法特征,根据预处理后的程序识别出初始的代码级内存缺陷检测对象;

步骤C.2、根据数据流分析的结果,分析出每个初始检测对象对应的代码级内存缺陷检测对象及检测点;

其中所属步骤D准确的判定代码级内存缺陷检测对象是否是缺陷的过程如图5所示,具体分以下步骤:

步骤D.1、对于代码级内存缺陷检测点,基于数据流分析结果获得代码级内存缺陷检测对象的存储状态;

步骤D.2、基于代码级内存缺陷模式,判定该代码级内存缺陷检测对象的存储状态是否符合该类代码级内存缺陷模式。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1