一种C程序中条件表达式的数据流分析方法技术

技术编号:15746535 阅读:106 留言:0更新日期:2017-07-03 02:04
本发明专利技术公开一种C程序中条件表达式的数据流分析方法,该方法对于通过预处理后的被测C程序,采用区间运算方法分析被测程序中的条件表达式的取值区间。该方法包括:A、通过识别条件表达式中的三个表达式的特征,归纳总结C程序中各种情况的条件表达式;B、采用区间运算方法实现对条件表达式的流敏感数据流分析。本发明专利技术的C程序中条件表达式数据流分析方法,可实现对C程序中各种条件表达式的精确分析,获得其取值区间。

A data flow analysis method for conditional expression in C program

The invention discloses a conditional C expression in program data flow analysis method, the method for the C program is determined by the pretreatment, using the interval arithmetic analysis method the range of measured conditional expressions in the program. The method includes: A, through the three characteristics of expression recognition in conditional expression, the expression of C induction condition summarized in the program; B, using the interval arithmetic method of flow sensitive data on the conditional expression flow analysis. In the C program of the present invention, the conditional expression data stream analysis method can realize accurate analysis of various conditional expressions in C programs and obtain the value range thereof.

【技术实现步骤摘要】
一种C程序中条件表达式的数据流分析方法
本专利技术涉及软件静态分析技术,尤其涉及基于静态分析的数据流分析。
技术介绍
静态分析是程序分析方法的一种类型,其目的是静态的分析软件的特征与属性。静态分析是再不实际运行被分析软件的前提下,通过扫描源程序,从中分析出程序中数据流与控制流的特征以及异常、程序结构特征以及异常等情况。数据流分析是静态分析的一种,通过模拟执行程序获得程序点上各变量的取值状态。为精确的实现数据流分析,需要对被分析程序中的各种数据结构、控制流、表达式、语句进行分析。其中条件表达式是C语言中唯一的三元运算符构成的表达式,结构为表达式1?表达式2:表达式3,其含义是若表达式1的值非0,则该条件表达式的值是表达式2的值,否则是表达式3的值。虽然条件表达式是表达式的一种,但从语义角度来看,条件表达式其实是条件语句,具有一种隐含的分支判断,需要按照条件语句的分析方法才能精确的分析出数据流信息。但是在采用基于控制流图进行流敏感的数据流分析时,条件表达式对应着控制流图的一个结点,导致难以对其进行分析。
技术实现思路
有鉴于此,本专利技术的主要目的在于通过归纳总结C程序中各种类型的条件表达式,基于控制流图采用区间运算的数据流分析方法分析出条件表达式的取值。传统的数据流分析方法对条件表达式分析不够精确的原因有:1、传统的数据流分析方法在基于控制流图进行分析时,采用流入控制流图节点的数据流方程与流出控制流节点的数据流方程来进行分析,但是条件表达式虽然只对应控制流图上的一个结点,其实从语义上来看是一种分支语句结构,因此传统的数据流分析方法未能够按照分支语句结构进行分析导致分析不够精确。2、未考虑条件表达式中表达式1对表达式2、表达式3的副作用影响。3、未采用流敏感的思想进行分析,通常是将表达式2的取值与表达式3的取值求并,而未根据表达式1的取值进行有区别的分析。针对上述导致C程序中条件表达式的数据流分析不够精确的原因,本专利技术提出了具有针对性的解决办法以实现对条件表达式的精确分析,具体的技术方案是这样实现的:1、一种C程序中条件表达式的数据流分析方法,其特征在于,该解决方法包括以下几个步骤:A、总结程序中各类条件表达式,并归纳出相关的语法特征;B、应用抽象抽象语法树描述条件表达式的语法;C、采用区间运算方法对条件表达式进行数据流分析。2、根据权利要求1所述的C程序中条件表达式的数据流分析方法,其特征在于,条件表达式的一般形式为:表达式1?表达式2:表达式3,所述步骤A中的总结程序中各类条件表达式,并归纳出相关的语法特征的具体过程如下:A1、按照表达式1是否会对变量取值有修改,分为无副作用表达式1、有副作用表达式1两种类型;A2、根据表达式2是否是空表达式,分为空表达式2与平凡表达式2两种类型;A3、根据表达式3是否是空表达式,分为空表达式3与平凡表达式3两种类型。3、根据权利要求1所述的C程序中条件表达式的数据流分析方法,其特征在于,所述步骤B中的应用抽象抽象语法树描述条件表达式的语法的具体过程如下:B1、将条件表达式的语法表示为:LogicalORExpression()[“?”[Expression()]“:”ConditionalExpression()];B2、采用CParser为被测程序生成抽象语法树,并对被测程序中的所有条件表达式生成对应的抽象语法子树。4、根据权利要求1所述的采用区间运算方法对C程序中条件表达式的数据流分析方法,其特征在于,所述步骤C中对条件表达式进行数据流分析的具体过程如下:C1、判断条件表达式生成对应的抽象语法子树中根节点的孩子结点数目,如果孩子结点数目为1,则将条件表达式的取值设置为全集区间,转步骤10;C2、在分析之前将活跃变量的取值区间信息暂存,采用区间运算技术分析表达式1的取值区间,并分析出表达式1对活跃变量副作用,如果表达式1对某些活跃变量产生了副作用,则将这些活跃变量新的取值区间替换原来的取值区间;C3、如果表达式1的取值区间与区间[-∞,-1]∪[1,+∞]的交集不为空,而且表达式1的取值区间与区间[0,0]的交集为空,而且表达式2不是空表达式,则转C4;如果表达式1的取值区间是[0,0],而且表达式3不是空表达式,则转C5;如果表达式1的取值区间与区间[-∞,-1]∪[1,+∞]的交集不为空,而且表达式1的取值区间与区间[0,0]的交集也不为空,则转C6;否则,将条件表达式的取值设置为全集区间,转步骤C10;C4、基于更新后的活跃变量的取值区间信息,采用区间运算技术分析表达式2的取值区间,并将表达式2的取值区间作为条件表达式的取值区间,如果表达式2对活跃变量产生了副作用,则将这些活跃变量新的取值区间替换原来的取值区间;转C10;C5、基于更新后的活跃变量的取值区间信息,采用区间运算技术分析表达式3的取值区间,并将表达式3的取值区间作为条件表达式的取值区间,如果表达式3对活跃变量产生了副作用,则将这些活跃变量新的取值区间替换原来的取值区间;转C10;C6、如果表达式3为空表达式,则转C4;如果表达式2为空表达式,则转C5;否则转C7;C7、基于更新后的活跃变量的取值区间信息,采用区间运算技术分析表达式2的取值区间,如果表达式2对活跃变量产生了副作用,则先将原有活跃变量的取值区间进行备份,再将这些活跃变量新的取值区间与原来的取值区间的并作为新的取值区间;C8、基于备份的活跃变量的取值区间信息,采用区间运算技术分析表达式3的取值区间,如果表达式3对活跃变量产生了副作用,则将这些活跃变量新的取值区间与原来的取值区间的并作为新的取值区间;C9、将表达式2的取值区间与表达式3的取值区间的并作为条件表达式的取值区间;C10、分析结束。本专利技术所提供的C程序中条件表达式的数据流分析方法,具有以下优点:应用区间运算方法,基于被测程序的控制流图进行流敏感的数据流分析方法对条件表达式进行分析,本专利技术能够保证对条件表达式分析的精度的原理在于:1、各种类型条件表达式分类的全面性。全面地归纳总结了各种类型的条件表达式,包括表达式1是否会产生副作用,表达式2、表达式3是否是空表达式;2、应用区间运算分析结果对条件表达式按照分支语句的语义进行分析。条件表达式从语义上来说是分支语句,为此,本方法首先对表达式1通过区间运算分析出其取值区间,并根据取值区间进行分情况的考虑;3、分析时考虑到了表达式的副作用。在对表达式1进行区间运算时,考虑到了是否对活跃变量有副作用,在对表达式2、表达式3进行区间运算时应用的是副作用更新后的数据流信息。附图说明图1、条件表达式分析流程示意图图2、条件表达式中表达式的识别流程示意图图3、条件表达式的数据流分析流程示意图具体实施方式本专利的方法进行条件表达式的数据流分析时,首先存在条件表达式的被测C程序进行预处理,得到抽象语法树、符号表、定义使用链、控制流图等程序的中间表示;然后采用区间运算技术基于控制流图进行流敏感的数据流分析。当分析到条件表达式所在语句对应的控制流图的结点时,首先识别出条件表达式对应的抽象语法子树的根节点的孩子数量,根据孩子数量判断出该条件表达式的类型;然后根据条件表达式的类型,采用区间运算技术对该条件表达式进行数据流分析,以得到该条件表达式的取值区间。本文档来自技高网...
一种C程序中条件表达式的数据流分析方法

【技术保护点】
一种C程序中条件表达式的数据流分析方法,其特征在于,该解决方法包括以下几个步骤:A、总结程序中各类条件表达式,并归纳出相关的语法特征;B、应用抽象语法树描述条件表达式的语法;C、采用区间运算方法对条件表达式进行数据流分析。

【技术特征摘要】
1.一种C程序中条件表达式的数据流分析方法,其特征在于,该解决方法包括以下几个步骤:A、总结程序中各类条件表达式,并归纳出相关的语法特征;B、应用抽象语法树描述条件表达式的语法;C、采用区间运算方法对条件表达式进行数据流分析。2.根据权利要求1所述的C程序中条件表达式的数据流分析方法,其特征在于,条件表达式的一般形式为:表达式1?表达式2:表达式3,所述步骤A中的总结程序中各类条件表达式,并归纳出相关的语法特征的具体过程如下:A1、按照表达式1是否会对变量取值有修改,分为无副作用表达式1、有副作用表达式1两种类型;A2、根据表达式2是否是空表达式,分为空表达式2与平凡表达式2两种类型;A3、根据表达式3是否是空表达式,分为空表达式3与平凡表达式3两种类型。3.根据权利要求1所述的C程序中条件表达式的数据流分析方法,其特征在于,所述步骤B中的应用抽象语法树描述条件表达式的语法的具体过程如下:B1、将条件表达式的语法表示为:LogicalORExpression()[“?”[Expression()]“:”ConditionalExpression()];B2、采用CParser为被测程序生成抽象语法树,并对被测程序中的所有条件表达式生成对应的抽象语法子树。4.根据权利要求1所述的采用区间运算方法对C程序中条件表达式的数据流分析方法,其特征在于,所述步骤C中对条件表达式进行数据流分析的具体过程如下:C1、判断条件表达式生成对应的抽象语法子树中根节点的孩子结点数目,如果孩子结点数目为1,则将条件表达式的取值设置为全集区间,分析终止;C2、在分析之前将活跃变量的取值区间信息暂存,采用区间运算技术分析表达式1的取值区间,并分析出表达式1对活跃变量副作用,如果表达式1对某些活跃变量产生了副...

【专利技术属性】
技术研发人员:董玉坤
申请(专利权)人:中国石油大学华东
类型:发明
国别省市:山东,37

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1