一种提升静态分析精度的符号分析方法技术

技术编号:38229774 阅读:19 留言:0更新日期:2023-07-25 17:58
本发明专利技术公开了一种提升静态分析精度的符号分析方法,包括以下步骤:步骤一,生成抽象语法树和控制流图;步骤二,生成调用图;步骤三,执行指针分析;步骤四,全局值编号;步骤五,计算CFG支配关系、支配边界以及控制依赖图;步骤六,静态单赋值形式构造;步骤七,显式暴露函数副作用;步骤八,构造带条件数据依赖图;步骤九,符号分析;步骤十,约束求解;本发明专利技术利用指针分析划分所有的内存区域,使得它能够处理所有的语言特性,提高了适用范围;本发明专利技术基于静态单赋值,以及通过构造带条件数据依赖图和控制依赖图,可以简洁地以遍历图的方式完成符号分析,并且通过调用SMT求解器求解以得到精确的解。的解。的解。

【技术实现步骤摘要】
一种提升静态分析精度的符号分析方法


[0001]本专利技术涉及静态程序分析
,具体为一种提升静态分析精度的符号分析方法。

技术介绍

[0002]目前,静态分析被广泛应用与编译优化与程序的静态缺陷检测。而符号分析是静态分析中常用的重要技术,例如在编译优化中,常量传播技术用于检测符号化变量是否等于常量,公共子表达式消除通过确定两个符号表达式是否相等以避免冗余计算;在程序验证中,符号分析用于证明程序中的断言(assert)可满足;在程序缺陷检测中,符号分析用于检测程序中是否存在缓冲区越界,整数溢出等问题。然而现有的符号分析方法大都存在如下两个问题:
[0003]一是只能处理C语言程序子集语法特性。已有的方法大多都只能分析并处理C语言中的未被取地址的局部变量,或者非常有限的一部分语言的子集特性,虽然能够应用于优化编译器中,但是很难应用到实际的静态分析工具中。由于它过于保守,使得分析精度比较低。例如:1.常量传播。传统的符号分析方法并不考虑分支条件,且在控制流合并处很容易以非常保守的方式合并状态,导致分析精度降低,这在实际的静态分析工具中,很难应用。2.只考虑未取地址的局部变量。实际的静态分析工具中,要求考虑包括指针解引用,函数调用在内的所有语法特性,但是传统的符号分析方法并不能处理所有的语言特性。
[0004]二是分析精度低。传统的符号分析方法在应用于静态缺陷检测时,常常采用符号化数值抽象域。传统的基于符号化数值抽象域的抽象解释技术,例如多面体抽象域(polyhedra),在控制流交汇处进行状态合并时,常常会导致精度损失。另一方面,基于符号执行的符号分析方法,目前仍然存在效率低,不得不对分析精度做取舍的问题。

技术实现思路

[0005]本专利技术的目的在于提供一种提升静态分析精度的符号分析方法,以解决上述
技术介绍
中提出的现有符号分析方法只能处理有限的语法特性、分析精度低的问题。
[0006]为实现上述目的,本专利技术提供如下技术方案:一种提升静态分析精度的符号分析方法,包括以下步骤:步骤一,生成抽象语法树和控制流图;步骤二,生成调用图;步骤三,执行指针分析;步骤四,全局值编号;步骤五,计算CFG支配关系、支配边界以及控制依赖图;步骤六,静态单赋值形式构造;步骤七,显式暴露函数副作用;步骤八,构造带条件数据依赖图;步骤九,符号分析;步骤十,约束求解;
[0007]其中在上述步骤一中,输入被分析工程代码,生成抽象语法树(AST),标准化语法树,并构造程序的控制流图(CFG);
[0008]其中在上述步骤二中,构造函数的调用图并进行拓扑排序,针对函数名调用,连接相关函数名的定义;针对函数指针调用,查看相关指针的是否被赋值某个函数名,如果是,则连接相关的函数名;
[0009]其中在上述步骤三中,沿着步骤二所构造的调用图自底向上执行符号化的指针分析,该指针分析划分内存区域,该划分技术基于符号化的访问路径(AccessPath),于是对程序中的每个表达式都可以确定其符号化的内存AccessPath;
[0010]其中在上述步骤四中,对程序中语句进行标记,即对步骤三指针分析得到的每个符号化内存访问(AccessPath)进行编号,命名为一个唯一的ID,并对程序中的load/store进行重写,使得程序中所有的语句都不存在间接内存访问,全部转换为显式的直接内存访问;
[0011]其中在上述步骤五中,对步骤四中标记后的程序进行SSA构造,构造函数的CFG节点间的支配关系,支配边界,并运行SSA算法构造程序的SSA表示,通过所构造的支配关系构造CFG的控制依赖图;
[0012]其中在上述步骤六中,根据步骤五所得到的控制依赖关系,修改经典的SSA构造算法,以保留程序的执行语义,即显式化数据依赖成立的条件;
[0013]其中在上述步骤七中,针对函数调用副作用,引入修改/引用(MOD/REF)摘要,通过引入辅助变量,插入辅助语句的方式显式暴露函数的副作用;
[0014]其中在上述步骤八中,构造程序的带条件数据依赖图,并组合控制依赖图,组合后的图中编码了代码执行所有必要的执行语义;
[0015]其中在上述步骤九中,利用静态分析算法通过遍历图的方式将步骤八中组合后的图转换为布尔可满足性模定理(SMT)公式;
[0016]其中在上述步骤十中,将步骤九得到的SMT公式交给SMT求解器求解,查询可解与否,完成相应的静态分析检查任务。
[0017]优选的,所述步骤六中,修改经典的SSA构造算法具体为:在重命名phi函数时将当前处理语句的控制依赖携带进Phi函数,使得该数据依赖的Def

Use是有条件的。
[0018]优选的,所述步骤七中,插入的副作用在函数的头部和尾部,以及函数调用的头部和尾部。
[0019]优选的,所述步骤八中,构造带条件数据依赖图的原理为:SSA算法显式地标识了表达式中所有操作数的定义使用关系,为所有定义点、运算符、操作数构造一个数据依赖节点。
[0020]优选的,所述步骤八中,构造带条件数据依赖图的过程中,针对与定义点,连接一条边,指向它的控制依赖对应的运算符节点,针对调用语句,连接相应的实参和形参节点即可。
[0021]优选的,所述步骤九中,静态分析算法原理为:根据静态分析的目的按需(On

Demand)对某个特定的数据依赖节点进行后向切片,在收集切片的过程中,不断收集数据依赖和控制依赖的传递闭包,在完成符号分析时,可直接得到布尔可满足性模定理(SMT)公式。
[0022]与现有技术相比,本专利技术的有益效果是:本专利技术利用指针分析划分所有的内存区域,使得它能够处理所有的语言特性,提高了适用范围;本专利技术基于静态单赋值,以及通过构造带条件数据依赖图和控制依赖图,可以简洁地以遍历图的方式完成符号分析,并且通过调用SMT求解器求解以得到精确的解。
附图说明
[0023]图1为本专利技术的方法流程图。
具体实施方式
[0024]下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。
[0025]请参阅图1,本专利技术提供的一种实施例:一种提升静态分析精度的符号分析方法,包括以下步骤:步骤一,生成抽象语法树和控制流图;步骤二,生成调用图;步骤三,执行指针分析;步骤四,全局值编号;步骤五,计算CFG支配关系、支配边界以及控制依赖图;步骤六,静态单赋值形式构造;步骤七,显式暴露函数副作用;步骤八,构造带条件数据依赖图;步骤九,符号分析;步骤十,约束求解;
[0026]其中在上述步骤一中,输入被分析工程代码(见表2),生成抽象语法树(AST),标准化语法树,并构造程序的控制流图(CFG)
[0027]其中在上述步骤二中,构造函数的调用图,调用关本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种提升静态分析精度的符号分析方法,包括以下步骤:步骤一,生成抽象语法树和控制流图;步骤二,生成调用图;步骤三,执行指针分析;步骤四,全局值编号;步骤五,计算CFG支配关系、支配边界以及控制依赖图;步骤六,静态单赋值形式构造;步骤七,显式暴露函数副作用;步骤八,构造带条件数据依赖图;步骤九,符号分析;步骤十,约束求解;其特征在于:其中在上述步骤一中,输入被分析工程代码,生成抽象语法树(AST),标准化语法树,并构造程序的控制流图(CFG);其中在上述步骤二中,构造函数的调用图并进行拓扑排序,针对函数名调用,连接相关函数名的定义;针对函数指针调用,查看相关指针的是否被赋值某个函数名,如果是,则连接相关的函数名;其中在上述步骤三中,沿着步骤二所构造的调用图自底向上执行符号化的指针分析,该指针分析划分内存区域,该划分技术基于符号化的访问路径(AccessPath),于是对程序中的每个表达式都可以确定其符号化的内存AccessPath;其中在上述步骤四中,对程序中语句进行标记,即对步骤三指针分析得到的每个符号化内存访问(AccessPath)进行编号,命名为一个唯一的ID,并对程序中的load/store进行重写,使得程序中所有的语句都不存在间接内存访问,全部转换为显式的直接内存访问;其中在上述步骤五中,对步骤四中标记后的程序进行SSA构造,构造函数的CFG节点间的支配关系,支配边界,并运行SSA算法构造程序的SSA表示,通过所构造的支配关系构造CFG的控制依赖图;其中在上述步骤六中,根据步骤五所得到的控制依赖关系,修改经典的SSA构造算法,以保留程序的执行语义,即显式化数据依赖成立的条件;其中在上述步骤七中,针对函数调用副作用,引入修改/引用(MOD/REF)摘要,通过引入辅助变量,插入辅助语句的方式...

【专利技术属性】
技术研发人员:陈睿贾春鹏王峥杨帆丁戈肖志恒王博祥于婷婷高栋栋
申请(专利权)人:北京轩宇信息技术有限公司
类型:发明
国别省市:

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

1