一种静态缺陷检测方法及其系统的制作方法_2

文档序号:8223406阅读:来源:国知局
节点(包括 LogicalExpress1n, AssignmentExpress1n, Relat1nalExpress1n, UnaryExpress1n等)生成原始的符号表达式,并进一步通过符号表达式化简器生成标准形式的符号表达式Sexi^进一步地,通过将每一个原子符号Svm与具体的区间抽象域关联,并根据Se-所包含原子符号的运算关系调用区间运算功能计算出整个SexiJ^区间信息;最终,通过在控制流图上逐节点进行变量、符号、区间的迭代计算,即可得到每个变量及表达式的区间取值信息。
[0055]S4、根据每个所述控制流节点的变量的区间取值信息,实时地更新状态机实例的状态,直至检测到所述状态机实例的缺陷或遍历完成所有路径上的控制流节点。
[0056]所述步骤S4具体包括:
[0057]S41,根据当前控制流节点的变量的区间取值信息,实时地更新当前控制流节点的状态机实例的状态和路径条件,依据路径条件中变量取值是否矛盾,判断是否为不可达路径,如果变量取值矛盾,则为不可达路径,将当前状态机实例销毁,结束检测过程,否则,进入下一步。
[0058]S42,读取当前状态机实例状态的条件约束,如果该状态的路径条件中的变量取值满足条件约束,则路径可达,继续执行下一个控制流节点;否则为不可达路径,将当前状态机实例销毁,结束检测过程;
[0059]S43,重复步骤S41和S42,直至检测到所述状态机实例的缺陷或遍历完成所有路径上的控制流节点。
[0060]根据路径条件中变量取值是否矛盾来判断是否为不可达路径的过程包括:在程序的执行过程中,程序的执行状态可由二元组1,P表示,其中,I代表当前的程序执行位置,P代表该状态下的环境,程序环境记录了程序中当前每一个变量X的值。在环境P下,变量X的取值记作P (X)。在本发明的检测方法中,从控制流图头节点依次进行状态迭代,每个状态都关联当前控制流点的所有变量取值信息。
[0061]程序通过路径S执行到位置1,则S上的谓词和赋值操作对I处环境P中各变量的可能取值范围进行了限定。我们将S在I处限定的变量取值范围集合称作S在I处的路径条件,记作R (S,I)。
[0062]程序通过路径S执行到位置1,属性状态机的状态沿S进行传递和变化。在I处到达状态σ,将R(S,I)记录在ο上,那么包含条件的属性状态表示为σ: {R(S,I)} ο
[0063]如果属性状态ο: {R(S,I)}中的变量取值矛盾表明该状态在一条不可达路径上传递,则将状态从可能状态集合中删除,否则执行下一步。
[0064]在符号化区间分析过程中,当路径条件中包含复杂的条件约束,或存在隐含的路径条件时,控制流分支语句处的数据流限定条件即是符号化的条件约束。在进行真假分支数据流求解的同时,通过保留区间分析过程中生成的符号化条件约束表达式,即可以得到符号化的条件约束。但并非所有的条件表达式都是“直接可用”的条件约束,部分需要进行转化。例如程序中的A> = O, (A*255+B> = 0)&&(B<255)都是直接可用的符号化条件约束,但if (file_name)中的限定条件“f ile_name ! = NULL”则必须进行转化。
[0065]根据条件限定语句与抽象语法树节点类型的对应关系,给定条件限定语句CondStmt,条件表达式CondExpr,生成的条件约束。程序中分支语句的限定条件经过上述约束转化规则后,得到的是真分支的数据流约束,其假分支的约束可以通过类似的转化规则得到。
[0066]然后读取当前状态机实例状态的条件约束,如果该状态的路径条件中的变量取值满足条件约束,则路径可达,继续执行下一个控制流节点;否则为不可达路径,将当前状态机实例销毁,结束检测过程。
[0067]另外,在缺陷检测完成后,提取检测到的缺陷发生的条件约束;将该缺陷和对应的约束条件作为约束求解器的输入进行求解,如果求解失败,表示检测到的所述状态机实例的缺陷的语义程序不可行,检测到的所述状态机实例的缺陷判定为误报,从而可以提高检测精度,减少误报。
[0068]图3示出了本发明的静态缺陷检测系统的结构框图。
[0069]参照图3,根据本发明的另一个方面,提供一种静态缺陷检测系统,所述系统包括:
[0070]模型构造单元10,用于构造被测程序的抽象语法树和控制流图;
[0071]状态机实例构造单元20,用于根据预设的缺陷模式,建立所述缺陷模式的状态机实例,并将所述状态机实例置于待测程序的控制流入口 ;
[0072]分析计算单元30,用于依路径遍历控制流图,并计算在遍历过程中每个控制流节点的变量的区间信息;
[0073]缺陷检测单元40,用于根据每个所述控制流节点的变量的区间取值信息,实时地更新状态机实例,直至检测到所述状态机实例的缺陷或遍历完成所有路径上的控制流节点。
[0074]缺陷判断单元50,用于提取检测到的所述状态机实例的缺陷发生的条件约束;将所述缺陷和所述约束条件作为约束求解器的输入进行求解,如果求解失败,表示检测到的所述状态机实例的缺陷的语义程序不可行,检测到的所述状态机实例的缺陷判定为误报。
[0075]本发明的静态缺陷检测方法,依被测程序的控制流图对每一条潜在路径进行遍历,基于符号化的区间分析技术,对变量和表达式进行区间运算,同时,通过综合采用矛盾的变量取值判断和条件约束验证方法判断程序中的不可达路径,从而提高了缺陷检测的精确性;另外,通过约束求解器对检测到的缺陷进行判断,对检测到的结果进行了求精,从而可以消除缺陷的误报。
[0076]虽然结合附图描述了本发明的实施方式,但是本领域技术人员可以在不脱离本发明的精神和范围的情况下做出各种修改和变型,这样的修改和变型均落入由所附权利要求所限定的范围之内。
【主权项】
1.一种静态缺陷检测方法,其特征在于,所述方法包括: 51、构造被测程序的抽象语法树和控制流图; 52、根据预设的缺陷模式,建立所述缺陷模式的状态机实例,并将所述状态机实例置于待测程序的控制流图的入口; 53、依路径遍历所述控制流图,并计算在遍历过程中每个控制流节点的变量的区间取值信息; 54、根据每个所述控制流节点的变量的区间取值信息,实时地更新所述状态机实例的状态,直至检测到所述状态机实例的缺陷或遍历完成所有路径上的控制流节点。
2.根据权利要求1所述的一种静态缺陷检测方法,其特征在于,所述步骤S3具体包括: S31,在所述控制流图入口处将输入值生成初始符号,取区间理论中的上界作为初始区间; 532、在数据流迭代过程中根据当前控制流节点的语义信息对各类程序语句中的变量进行符号表示,生成符号表达式; 533、通过对所述符号表达式进行区间运算得到所述当前控制流节点的每个变量的区间?目息。
3.根据权利要求1所述的一种静态缺陷检测方法,其特征在于,所述步骤S4具体包括: S41,根据当前控制流节点的变量的区间取值信息,实时地更新当前控制流节点的状态机实例的状态和路径条件,依据路径条件中变量取值是否矛盾,判断是否为不可达路径,如果变量取值矛盾,则为不可达路径,将当前状态机实例销毁,结束检测过程,否则,进入下一步; S42,读取当前状态机实例状态的条件约束,如果该状态的路径条件中的变量取值满足条件约束,则路径可达,继续执行下一个控制流节点;否则为不可达路径,将当前状态机实例销毁,结束检测过程; S43,重复步骤S41和S42,直至检测到所述状态机实例的缺陷或遍历完成所有路径上的控制流节点。
4.根据权利要求1所述的一种静态缺陷检测方法,其特征在于,所述方法还包括: 提取检测到的所述状态机实例的缺陷发生的条件约束;将所述缺陷和所述约束条件作为约束求解器的输入进行求解,如果求解失败,表示检测到的所述状态机实例的缺陷的语义程序不可行,检测到的所述状态机实例的缺陷判定为误报。
5.一种静态缺陷检测系统,其特征在于,所述系统包括: 模型构造单元,用于构造被测程序的抽象语法树和控制流图; 状态机实例构造单元,用于根据预设的缺陷模式,建立所述缺陷模式的状态机实例,并将所述状态机实例置于待测程序的控制流入口; 分析计算单元,用于依路径遍历控制流图,并计算在遍历过程中每个控制流节点的变量的区间信息; 缺陷检测单元,用于根据每个所述控制流节点的变量的区间取值信息,实时地更新所述状态机实例的状态,直至检测到所述状态机实例的缺陷或遍历完成所有路径上的控制流节点。
6.根据权利要求5所述的一种静态缺陷检测方法,其特征在于,所述系统还包括:缺陷判断单元,用于提取检测到的所述状态机实例的缺陷发生的条件约束;将所述缺陷和所述约束条件作为约束求解器的输入进行求解,如果求解失败,表示检测到的所述状态机实例的缺陷的语义程序不可行,检测到的所述状态机实例的缺陷判定为误报。
【专利摘要】本发明涉及一种静态缺陷检测方法及其系统,该方法包括:S1、构造被测程序的抽象语法树和控制流图;S2、根据预设的缺陷模式,建立所述缺陷模式的状态机实例,并将所述状态机实例置于待测程序的控制流入口;S3、依路径遍历控制流图,并计算在遍历过程中每个控制流节点的变量的区间信息;S4、根据每个所述控制流节点的变量的区间取值信息,实时地更新所述状态机实例的状态,直到检测到所述状态机实例的缺陷或遍历完成所有路径上的控制流节点。该方法基于符号化的区间分析技术,通过综合采用矛盾的变量取值判断和条件约束验证方法判断程序中的不可达路径,从而提高了缺陷检测的精确性。
【IPC分类】G06F11-36
【公开号】CN104536883
【申请号】CN201410736842
【发明人】黄俊飞, 张大林, 金大海, 宫云战, 王雅文
【申请人】北京邮电大学
【公开日】2015年4月22日
【申请日】2014年12月5日
当前第2页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1