大规模程序增量静态分析方法

专利检索2025-04-08  6


本发明涉及静态程序分析技术和增量迭代分析,特别涉及一种大规模程序增量静态分析方法。


背景技术:

1、程序静态分析是一种在不运行代码的方式下,通过词法分析、语法分析、控制流数据流分析等技术对程序代码进行扫描,验证代码是否满足规范性、安全性、可靠性、可维护性等指标的一种代码分析技术。程序静态分析可以发现可能存在的错误、漏洞、风险等问题,并给出相应的修复建议或优化方案。程序静态分析可以提高代码质量,降低缺陷修复成本,提升开发效率。该技术的优点是可以检测到所有可能的执行路径,可以在不运行程序的情况下对程序进行分析,可以在编程阶段迅速检查出大量错误,显著减少整个项目的开发成本;

2、svf是一个静态程序分析工具,它为c/c++程序提供可扩展的、精确的过程间依赖分析,以llvm ir为输入,为c/c++程序实现了andersen指针分析。借助指针分析的结果,svf可以进行更精确的静态程序分析,从而实现更高精度的污点分析、缺陷检测等功能。

3、增量迭代分析是指在程序分析过程中,只处理那些自上次分析以来发生了变化的源文件和指令,通过在少量的变化上做更新迭代,产生新的分析结果,从而节省分析时间和资源的一种技术。


技术实现思路

1、目前,本发明提出了一种大规模程序增量静态分析方法,旨在解决现有静态分析技术处理大规模程序时分析效率不高的问题。本发明通过以下技术方案来实现。

2、一种大规模程序增量静态分析方法,该方法包括以下步骤:

3、步骤1)识别新旧源代码和指令的变更;基于源码进行变更分析,得到变化的行号,利用这些行号匹配出变化的指令,同时构造没有变化的指令在旧代码和新代码之间的映射;

4、步骤2)增量指针分析;基于所述步骤1)中得到的变化指令,在约束图中传递指令的删除或插入变化,基于相关映射关系,更新指向集中的编号;

5、步骤3)增量静态单赋值分析;基于所述步骤2)中得到的指向集变更,更新静态单赋值中的指向集信息;

6、步骤4)全量值流分析;基于所述步骤3)中得到的静态单赋值信息,连接各个变量的定义点和使用点,形成值流图。

7、进一步的,上述的大规模程序增量静态分析方法,所述步骤1)识别新旧源代码与指令的变更具体包括以下步骤:

8、步骤11)基于旧的源码和新的源码之间的差异,产生变化的代码行;

9、步骤12)基于变化的代码行,识别中间代码中变化的指令。

10、步骤13)基于未变化的指令,构造旧代码中的指令到新代码中的指令的映射。

11、进一步的,上述的大规模程序增量静态分析方法,所述步骤2)增量指针分析具体包括以下步骤:

12、步骤21)通过反序列化上一次指针分析的持久化信息,获取上一次分析的约束图和指向集;

13、步骤22)分析并传播删除指令对应的变化;删除ir指令可能导致约束图边的删除和指向集元素的删除,传播这些变化直到约束图收敛到稳定状态,记录并输出指向集的删除变更;

14、步骤23)更新指向集的编号;基于所述步骤13)构建的相关映射,将旧指向集中的编号更新为新指向集对应的编号;

15、步骤24)传播插入指令对应的变化;插入ir指令可能导致约束图边的插入和指向集元素的插入,传播这些变化直到约束图收敛到稳定状态,记录并输出指向集的插入变更。

16、进一步的,上述的大规模程序增量静态分析方法,所述步骤3)增量静态单赋值分析具体包括以下步骤:

17、步骤31)参照所述步骤21)的方法获取上一次分析产生的静态单赋值信息;

18、步骤32)获取所述步骤2)增量指针分析产生的指向集变更得到变更增量,根据所述变更增量更新静态单赋值。

19、进一步的,上述的大规模程序增量静态分析方法,所述步骤4)全量值流分析具体包括以下步骤:

20、步骤41)根据所述步骤3)产生的静态单赋值信息连接抽象对象之间的定义和使用的关系,形成非直接值流;

21、步骤42)连接普通变量之间的定义和使用关系,形成直接值流。

22、本发明采用以上技术方案,具有以下有益效果:

23、本发明可以精确识别源代码和指令的变更,最大程度减少增量静态分析需要处理的数据量;本发明增量更新指向集和约束图,减少了指针分析这一计算密集型任务的运算数据量和循环迭代次数,提高了分析效率,产生了指向集变更;同时本发明增量更新静态单赋值信息,精确且高效地确定了变量的定义(define)点和使用(use)点;本发明最后以值流图的形式,直观地展示了各个变量和对象在程序模块之间的传递关系。



技术特征:

1.一种大规模程序增量静态分析方法,其特征在于,该方法包括以下步骤:

2.根据权利要求1所述的大规模程序增量静态分析方法,其特征在于,所述步骤1)识别新旧源代码与指令的变更具体包括以下步骤:

3.根据权利要求1所述的大规模程序增量静态分析方法,其特征在于,所述步骤2)增量指针分析具体包括以下步骤:

4.根据权利要求1所述的大规模程序增量静态分析方法,其特征在于,所述步骤3)增量静态单赋值分析具体包括以下步骤:

5.根据权利要求1所述的大规模程序增量静态分析方法,其特征在于,所述步骤4)全量值流分析具体包括以下步骤:


技术总结
本发明公开一种大规模程序增量静态分析方法,该方法首先利用进行变更分析得到变化的行号匹配出变化的指令同时构造新旧代码之间的映射;然后基于得到的变化指令和映射关系,更新指向集中的编号;在基于得到的指向集变更,更新静态单赋值中的指向集信息;最后基于得到的静态单赋值信息,连接各个变量的定义点和使用点,形成值流图。本发明可以精确识别源代码和指令的变更,最大程度减少增量静态分析需要处理的数据量,同时本发明最后以值流图的形式,直观地展示了各个变量和对象在程序模块之间的传递关系。

技术研发人员:王豫,刘如岩,王林章,李宣东
受保护的技术使用者:南京大学
技术研发日:
技术公布日:2024/5/29
转载请注明原文地址:https://win.8miu.com/read-1152133.html

最新回复(0)