System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 一种基于高精度静态程序分析的过程间冗余保护检测方法技术_技高网
当前位置: 首页 > 专利查询>南京大学专利>正文

一种基于高精度静态程序分析的过程间冗余保护检测方法技术

技术编号:41613470 阅读:2 留言:0更新日期:2024-06-13 02:17
本发明专利技术公开一种基于高精度静态程序分析的过程间冗余保护检测方法,用于检测代码中一类共同特征为使用前需要保护性判断以避免程序错误的特殊类型或用途的变量在过程间存在的多次效果等价的冗余保护判断代码,该方法包括步骤:分析收集程序中保护性判断语句信息;分析收集程序中该类特殊类型或用途的变量信息;构建上下文敏感的逆向函数调用链;分析逆向函数调用链并检测是否存在冗余保护。本方法首次提出过程间冗余保护这种冗余代码类型;本方法考虑多层函数调用的情况,支持在复杂调用关系下的过程间冗余保护检测;本方法采用局部数据流分析和局部域敏感分析,实现检测效率和精度的平衡。

【技术实现步骤摘要】

本专利技术涉及软件工程,特别涉及一种基于高精度静态程序分析的过程间冗余保护检测方法


技术介绍

1、程序中存在一类特殊类型或用途的变量,包括指针类型变量、作为数组下标使用的变量、作为算术运算中除数使用的变量等。此类变量的共同特点是,其在代码中使用之前需要进行一定的保护性判断,从而避免空指针解引用、数组越界或除零错误等缺陷引起的程序异常、崩溃或其他安全性问题。过程间冗余保护是指当程序将此类特殊类型或用途的变量作为实参在函数调用中传递时,在不同的代码位置对同一变量进行了多次效果相同的保护性判断,且在程序流中两次保护性判断之间未对变量进行重赋值。过程间冗余保护不仅会对代码风格造成不良影响,代码中大量存在过程间冗余保护还会导致程序运行效率降低。由于过程间冗余保护并不影响程序功能的正确性,因此难以通过动态测试的方法进行检测和定位。通过静态分析技术对程序中特殊类型或用途的变量及其相关保护语句进行分析,可以高效精准地检测和定位代码中的过程间冗余保护,从而支持开发者优化代码,提高程序运行效率。

2、本专利技术使用到的关键技术有控制流分析和数据流分析。通过构建控制流图反映所有基本块执行流,构建函数调用图反映函数调用的关系。通过数据流分析获取变量在程序的控制流图、函数调用图上的传播信息,并进行相关分析。

3、本专利技术公开一种基于高精度静态程序分析的流敏感、上下文敏感的过程间冗余保护检测方法。首先以函数为粒度分析并收集程序中特殊类型或用途的变量及其相关保护语句的信息。然后基于函数调用图,针对每个被调用函数的每个实参变量构建相应的逆向调用链。最终在逆向调用链上判断同一变量在不同函数中是否存在过程间冗余保护。


技术实现思路

1、目前,对于程序中冗余代码的分析,大部分侧重于检测程序中的死代码、循环中的不变表达式等,而对于本方法提出的特殊类型或用途的变量在过程间的冗余保护这种类型仍然缺少相关工作。目前静态检测工具大部分通过牺牲检测效率提高精度,在复杂检测场景中缺少对效率与精度的平衡。本专利技术提出了一种基于高精度静态程序分析的过程间冗余保护检测方法,旨在解决过程间冗余保护这类冗余代码的检测问题,以及在复杂检测场景中平衡效率和精度的问题。本专利技术通过以下技术方案来实现。

2、一种基于高精度静态程序分析的过程间冗余保护检测方法,其特征在于,该方法包括以下步骤:

3、步骤1)通过静态程序分析定位并收集每个函数中不同语法模式的保护语句信息,并提取保护语句中的条件表达式。所述步骤1)具体包括以下步骤:

4、步骤11)递归遍历每个函数的抽象语法树,遍历所有可能的保护语句,所述保护语句包括if-else语句、for语句、while语句、do-while语句、return语句、三元表达式,根据不同的语法模式提取所述保护语句中的条件表达式。

5、步骤12)分析并处理条件表达式;递归遍历条件表达式的抽象语法树,根据遍历到的不同操作符对条件表达式或子条件表达式做不同处理,将复合条件表达式拆分为简单条件表达式,并提取所述简单条件表达式中的变量。

6、步骤13)若当前条件表达式中优先级最高的操作符为二元逻辑操作符,则所述条件表达式为复合条件表达式,将操作符的左操作数与右操作数拆分为两个子条件表达式,继续递归。

7、步骤14)若当前条件表达式中优先级最高的操作符为一元逻辑操作符或关系操作符,则所述条件表达式已经是简单条件表达式,不再拆分。

8、步骤15)将简单条件表达式与所述简单条件表达式中的变量关联,在过程间冗余保护检测中所述变量即为简单条件表达式保护的对象;递归遍历简单条件表达式的抽象语法树,若遍历到任意操作符,则继续递归,直到遍历到变量时停止递归,将变量与简单条件表达式关联。

9、步骤16)三元表达式用于变量声明或变量赋值时,所述三元表达式的保护对象为声明或赋值的变量,将所述变量与三元表达式关联。

10、其有益效果是,定义了过程间冗余保护中保护语句的概念,支持分析收集多种语法模式的保护语句。

11、步骤2)通过静态程序分析定位并收集每个函数中有效的特殊类型或用途的变量信息;特殊变量包括指针类型变量、作为数组下标使用的变量、作为除数使用的变量。所述步骤2)具体包括以下步骤:

12、步骤21)分析定位并收集每个函数中指针类型变量信息;递归遍历每个函数的抽象语法树,对于遍历到的所有表达式,提取并收集表达式中指针类型的变量用于后续分析。

13、步骤22)分析定位并收集每个函数中作为数组下标使用的变量信息;递归遍历每个函数的抽象语法树,对于遍历到的所有数组类型变量表达式,提取数组类型变量表达式中的数组下标对应的变量,对所述变量进行收集用于后续分析。

14、步骤23)分析定位并收集每个函数中作为除数使用的变量信息;递归遍历每个函数的抽象语法树,对于遍历到的所有除法表达式,提取除法表达式中除数对应的变量,对所述变量进行收集用于后续分析。

15、步骤24)通过分析对比特殊变量与所述特殊变量所在函数的形参变量列表,判断所述步骤21)-步骤23)中收集的特殊类型或用途的变量是否为过程间变量,删除非过程间变量信息。

16、步骤25)通过分析对比特殊变量与所述步骤1)中收集的保护语句信息,判断所述步骤21)-步骤23)中收集的特殊类型或用途的变量在过程间冗余保护检测中是否为有效特殊变量,删除无效的特殊变量信息;若特殊变量在函数中存在至少一条相关的保护语句,则所述特殊变量在过程间冗余保护检测中有效。

17、其有益效果是,定义了过程间冗余保护中特殊类型或用途的变量的概念,支持分析收集指针类型变量、作为数组下标使用的变量、作为除数使用的变量。

18、步骤3)通过函数调用图分析和数据流分析,构建包含实参信息的上下文敏感的逆向函数调用链,每条逆向函数调用链对应一个待检测的特殊变量在过程间传递的一种上下文情况。所述步骤3)具体包括以下步骤:

19、步骤31)分析函数的形参列表,若至少存在一个形参为待检测的特殊变量,则将所述函数作为正在构建的逆向函数调用链的起点。

20、步骤32)排除特殊变量不存在冗余保护的可能性;结合所述步骤1)中收集的保护语句信息进行数据流和控制流分析,排除在所有保护语句之前重赋值过的特殊变量。

21、步骤33)利用深度优先搜索变形算法递归遍历函数调用图,构建逆向函数调用链;所述深度优先搜索变形算法在递归过程中,在构建同一逆向函数调用链时路径上的每个节点只处理一次,而在构建不同调用链时同一节点可能被处理多次。

22、步骤34)根据函数调用图,分析当前函数的调用者函数中对应函数调用语句包含的实参变量信息,每个不同实参变量都对应生成一条不同的逆向函数调用链。

23、步骤35)根据实参变量是否能沿逆向调用链传播,判断是否继续递归构建逆向函数调用链;若不能,不再继续构建所述逆向函数调用链;否则,将调用者函数作为当前函本文档来自技高网...

【技术保护点】

1.一种基于高精度静态程序分析的过程间冗余保护检测方法,其特征在于,所述方法包括以下步骤:

2.根据权利要求1所述的基于高精度静态程序分析的过程间冗余保护检测方法,其特征在于,所述步骤1)分析收集保护语句具体包括以下步骤:

3.根据权利要求1所述的基于高精度静态程序分析的过程间冗余保护检测方法,其特征在于,所述步骤2)分析收集特殊变量具体包括以下步骤:

4.根据权利要求1所述的基于高精度静态程序分析的过程间冗余保护检测方法,其特征在于,所述步骤3)构建逆向调用链具体包括以下步骤:

5.根据权利要求1所述的基于高精度静态程序分析的过程间冗余保护检测方法,其特征在于,所述步骤4)检测冗余保护具体包括以下步骤:

【技术特征摘要】

1.一种基于高精度静态程序分析的过程间冗余保护检测方法,其特征在于,所述方法包括以下步骤:

2.根据权利要求1所述的基于高精度静态程序分析的过程间冗余保护检测方法,其特征在于,所述步骤1)分析收集保护语句具体包括以下步骤:

3.根据权利要求1所述的基于高精度静态程序分析的过程间冗余保护检测方法,其特征在于...

【专利技术属性】
技术研发人员:王豫蔡悦王林章李宣东
申请(专利权)人:南京大学
类型:发明
国别省市:

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

1