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、传统的数据流分析方法在基于控制流图进行分析时,采用流入控制流图节点的数据流方程与流出控制流节点的数据流方程来进行分析,但是条件表达式虽然只对应控制流图上的一个结点,其实从语义上来看是一种分支语句结构,因此传统的数据流分析方法未能够按照分支语句结构进行分析导 ...
【技术保护点】
一种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对某些活跃变量产生了副...
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。