一种有序、增强、可缓存的符号执行静态分析方法及系统技术方案

技术编号:36958766 阅读:10 留言:0更新日期:2023-03-22 19:19
本发明专利技术涉及一种有序、增强、可缓存的符号执行静态分析方法及系统,通过图结构拓扑排序计算程序函数,检查器的依赖顺序;依序进行各检查步骤;缓存、查找各依赖步骤的检查信息;利用已检查检查器的信息组合计算出当前检查器的检查信息;利用已检查函数的信息组合计算出当前函数的检查信息。本发明专利技术按照依赖顺序通过组合的方式实现为互相依赖的检查器,增加检查器复用率,减少重复开发;函数间的依赖顺序能解决跨函数调用的分析依赖问题;同时通过把已分析结果缓存下来能有效提升分析的效率,还能在此基础上实现增量分析,跨二进制库分析。跨二进制库分析。跨二进制库分析。

【技术实现步骤摘要】
一种有序、增强、可缓存的符号执行静态分析方法及系统


[0001]本专利技术涉及信息安全
,尤其涉及一种有序、增强、可缓存的符号执行静态分析方法及系统。

技术介绍

[0002]代码静态分析中的符号执行方法是一种采用搜索的算法,通过模拟代码执行逻辑,利用约束求解等技术较为准确地查找代码缺陷的方式,搜索花费时间正比于程序的代码规模,处理千万行级以上的代码,完整的搜索时间可能会花费几个小时之久,而这满足不了软件开发企业大量推行的敏捷,以及自动化流程的需要;并且跨函数、跨文件分析也是静态分析一个常见的问题,因此,如何解决现有代码静态分析方法存在的问题,是目前需要考虑的。
[0003]需要说明的是,在上述
技术介绍
部分公开的信息只用于加强对本公开的背景的理解,因此可以包括不构成对本领域普通技术人员已知的现有技术的信息。

技术实现思路

[0004]本专利技术的目的在于克服现有技术的缺点,提供了一种有序、增强、可缓存的符号执行静态分析方法及系统,解决了现在代码静态分析方法存在的不足。
[0005]本专利技术的目的通过以下技术方案来实现:一种有序、增强、可缓存的符号执行静态分析方法,所述静态分析方法包括:
[0006]S1、将程序代码中每一个函数调用点抽象为一个节点调用者、节点被调用者和调用者指向被调者的有向边,将全程序的调用节点和调用边集合为此程序的函数调用图;
[0007]S2、对函数调用图进行拓扑排序得到函数的依赖顺序为逆序的列表;
[0008]S3、根据逆序顺序将函数调用图分成单独的函数单元和检查器单元,并对函数单元和检查器单元依次遍历计算,在完整的遍历完成后完成此次分析;
[0009]S4、通过堆栈存储本次计算的中间结果,供后续依赖计算使用,同时查找本次计算依赖的中间缓存结果;
[0010]S5、根据缓存查询的所有相关语句编号和语句执行信息,根据各语句执行信息求解判断是否满足缺陷条件,满足即产生一个缺陷结果。
[0011]所述S3步骤具体包括:
[0012]将函数调用图中的函数分成多个单独的函数单元,每个函数单元的分支为一条单独的执行路径,采用深度优先顺序遍历,遍历完成的分支路径即完成对此函数单元的分析;
[0013]将函数调用图中所有检查器按照功能进行拆分,实现为以函数为单位组织的单元,对每个检查器单元实现的函数重复执行步骤S1和S2,依次得到所有检查器单元的函数调用图和有依赖顺序的检查器函数列表,并按照依赖顺序依次用检查器对程序函数进行分析计算。
[0014]所述检查器包括基础层和逻辑层,基础层用于基础信息提取,且能在其他检查器
重复使用;逻辑层用于根据使用已释放内存业务逻辑完成具体缺陷的业务逻辑。
[0015]所述堆栈存储包括:在模拟执行到达一个条件分支的时候,每一个分支条件新创建一个栈帧,把后续此分支条件包含的中间信息保存在此栈帧中,,在当前分支条件执行完毕,弹出此分支条件的栈帧,切换到其他分支条件的栈帧,以此往复,堆栈中的栈帧集合即为此分支条件可达时的完整信息。
[0016]所述缺陷条件是根据检查器内容对程序语义进行的抽象,表示为数理逻辑中的一组约束条件符号,最后用约束求解对这组约束条件进行判断;约束求解主要对缺陷条件和分支条件机箱内求解,在分支阶段提前约束以减少不可达分支计算,或者在最后产生缺陷阶段计算分支条件,以减少分支条件计算量。
[0017]一种有序、增强、可缓存的符号执行静态分析系统,它包括排序准备模块、有序遍历模块、缓存管理模块和检查计算模块;
[0018]所述排序准备模块:用于将程序代码中每一个函数调用点抽象为一个节点调用者、节点被调用者和调用者指向被调者的有向边,将全程序的调用节点和调用边集合为此程序的函数调用图,对函数调用图进行拓扑排序得到函数的依赖顺序为逆序的列表;
[0019]所述有序遍历模块:用于根据逆序顺序将函数调用图分成单独的函数单元和检查器单元,并对函数单元和检查器单元依次遍历计算,在完整的遍历完成后完成此次分析;
[0020]所述缓存管理模块:用于通过堆栈存储本次计算的中间结果,供后续依赖计算使用,同时查找本次计算依赖的中间缓存结果;
[0021]所述检查计算模块:用于根据缓存查询的所有相关语句编号和语句执行信息,根据各语句执行信息求解判断是否满足缺陷条件,满足即产生一个缺陷结果。
[0022]所述有序遍历模块包括函数分析单元和检查器分析单元;
[0023]所述函数分析单元:用于将函数调用图中的函数分成多个单独的函数单元,每个函数单元的分支为一条单独的执行路径,采用深度优先顺序遍历,遍历完成的分支路径即完成对此函数单元的分析;
[0024]所述检查器分析单元:用于将函数调用图中所有检查器按照功能进行拆分,实现为以函数为单位组织的单元,对每个检查器单元实现的函数重复执行排序准备模块,依次得到所有检查器单元的函数调用图和有依赖顺序的检查器函数列表,并按照依赖顺序依次用检查器对程序函数进行分析计算。
[0025]一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现所述静态分析方法的步骤。
[0026]一种终端设备,包括存储器和处理器,所述存储器上存储有计算机程序,所述处理器执行所述计算机程序时实现所述静态分析方法的步骤。
[0027]本专利技术具有以下优点:一种有序、增强、可缓存的符号执行静态分析方法及系统,按照依赖顺序通过组合的方式实现为互相依赖的检查器,增加检查器复用率,减少重复开发;函数间的依赖顺序能解决跨函数调用的分析依赖问题;同时通过把已分析结果缓存下来能有效提升分析的效率,还能在此基础上实现增量分析,跨二进制库分析。
附图说明
[0028]图1为本专利技术方法的流程示意图;
[0029]图2为函数调用图拓扑排序示例图;
[0030]图3为分支路径状态保存堆栈示例图。
具体实施方式
[0031]为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。因此,以下结合附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的保护范围,而是仅仅表示本申请的选定实施例。基于本申请的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。下面结合附图对本专利技术做进一步的描述。
[0032]本专利技术其中一种实施方式涉及一种有序、增强、可缓存的符号执行静态分析方法,通过图结构拓扑排序计算程序函数,检查器的依赖顺序;依序进行各检查步骤;缓存、查找各依赖步骤的检查信息;利用已检查检查器的信息组合计算出当前检查器的检查信息;利用已检查函数的信息组合计算出当前函数的检查信息。
[0033]如本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种有序、增强、可缓存的符号执行静态分析方法,其特征在于:所述静态分析方法包括:S1、将程序代码中每一个函数调用点抽象为一个节点调用者、节点被调用者和调用者指向被调者的有向边,将全程序的调用节点和调用边集合为此程序的函数调用图;S2、对函数调用图进行拓扑排序得到函数的依赖顺序为逆序的列表;S3、根据逆序顺序将函数调用图分成单独的函数单元和检查器单元,并对函数单元和检查器单元依次遍历计算,在完整的遍历完成后完成此次分析;S4、通过堆栈存储本次计算的中间结果,供后续依赖计算使用,同时查找本次计算依赖的中间缓存结果;S5、根据缓存查询的所有相关语句编号和语句执行信息,根据各语句执行信息求解判断是否满足缺陷条件,满足即产生一个缺陷结果。2.根据权利要求1所述的一种有序、增强、可缓存的符号执行静态分析方法,其特征在于:所述S3步骤具体包括:将函数调用图中的函数分成多个单独的函数单元,每个函数单元的分支为一条单独的执行路径,采用深度优先顺序遍历,遍历完成的分支路径即完成对此函数单元的分析;将函数调用图中所有检查器按照功能进行拆分,实现为以函数为单位组织的单元,对每个检查器单元实现的函数重复执行步骤S1和S2,依次得到所有检查器单元的函数调用图和有依赖顺序的检查器函数列表,并按照依赖顺序依次用检查器对程序函数进行分析计算。3.根据权利要求2所述的一种有序、增强、可缓存的符号执行静态分析方法,其特征在于:所述检查器包括基础层和逻辑层,基础层用于基础信息提取,且能在其他检查器重复使用;逻辑层用于根据使用已释放内存业务逻辑完成具体缺陷的业务逻辑。4.根据权利要求1所述的一种有序、增强、可缓存的符号执行静态分析方法,其特征在于:所述堆栈存储包括:在模拟执行到达一个条件分支的时候,每一个分支条件新创建一个栈帧,把后续此分支条件包含的中间信息保存在此栈帧中,,在当前分支条件执行完毕,弹出此分支条件的栈帧,切换到其他分支条件的栈帧,以此往复,堆栈中的栈帧集合即为此分支条件可达时的完整信息。5.根据权利要求2所述的一种有序、增强、可缓存的符号执行静态分析方法,其特征在于:所述缺陷条件是根据检查器内容对程序语义进行的抽象,表示为数理逻辑中的一组约束条件符号,最...

【专利技术属性】
技术研发人员:朱辉陈昭宇
申请(专利权)人:软安科技有限公司
类型:发明
国别省市:

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

1