当前位置: 首页 > 专利查询>南京大学专利>正文

一种用于大规模系统中状态相关缺陷的静态检测方法技术方案

技术编号:21034030 阅读:42 留言:0更新日期:2019-05-04 05:20
本发明专利技术涉及一种用于大规模系统中状态相关缺陷的静态检测方法,首先将大规模系统中与状态相关的缺陷抽象为有限状态机表示的形式。其次基于符号执行技术产生过程间控制流执行树(ICFET),并提出了一个新的基于区间的路径编码/解码算法来表示路径约束。然后基于ICFET以上下文敏感和路径敏感的方式进行别名分析和数据流分析,跟踪每个指定类型的每个对象的流,以识别可能在对象上发生的事件序列。最后根据ICFET以及别名分析和数据流分析产生的程序图,进行基于约束的图可达性计算,如果可达边能够到达有限状态机中未定义或错误状态,则存在可以将一个对象或一组对象驱动到规范上的未定义或错误状态的事件序列,生成错误报告。

A Static Detection Method for State-Dependent Defects in Large-Scale Systems

【技术实现步骤摘要】
一种用于大规模系统中状态相关缺陷的静态检测方法
本专利技术涉及一种用于大规模系统中状态相关缺陷的静态检测方法,属于软件工程、计算机系统、高性能计算交叉技术应用领域。
技术介绍
大规模软件系统包括操作系统、网页浏览器、数据库、数据库处理引擎等,它构成了现代计算的支柱。由于这些系统广泛应用于各个领域,因此确保其可靠性至关重要。尽管工业界和学术界不断致力于这些系统更可靠,但大规模软件系统中仍然经常出现错误。大规模软件系统中一种常见的错误类型是与状态相关的:在一个有限的事件序列发生在感兴趣的对象之后,出现一个错误将对象驱动到一个错误的状态。比如在不再使用后未释放的以获取锁,在完成文件访问后未关闭的打开文件处理程序,或者在从不再次使用包含数据时未释放或双重释放的已分配内存区域等。涉及此类错误的对象通常可以通过具有其可能状态的有限状态机(FSM)来描述。程序静态分析是基于预定义的规则或模型,通过扫描源代码,验证代码是否满足安全性、可靠性等指标的一种代码分析技术。静态分析技术不需要运行程序,可以在软件部署之前就发现缺陷,便于自动化,近年来广泛用于安全漏洞检测领域。有效检测状态相关的错误需要精确跟踪每个感兴趣的对象的状态转换,并且需要同时具有上下文敏感性和路径敏感性来准确报告真正的错误。因此传统静态分析技术在检测大规模系统中的状态相关缺陷时需要非常大的内存来记录每个感兴趣的对象的状态转换信息,并且需要耗费大量时间进行计算来产生检测结果。
技术实现思路
技术问题:本专利技术提供一种用于大规模系统中状态相关缺陷的静态检测方法,目的是解决现有技术难以检测大规模系统中的状态相关缺陷的问题,可以对非常大的代码库执行有限状态属性的精确和可扩展的静态检查,高效、精准的检测出大规模系统中多种错误,包括源—接收问题(如资源泄漏),异常处理错误(如缺少错误处理代码),或类型状态相关的错误(如不恰当使用的文件处理程序)等。这些都是现代分布式计算系统中的常见错误。技术方案:本专利技术提出一种用于大规模系统中状态相关缺陷的静态检测方法,该方法首先将大规模系统中与状态相关的缺陷抽象为有限状态机表示的形式。其次基于符号执行技术产生过程间控制流执行树(ICFET),并提出了一个新的基于区间的路径编码/解码算法来表示路径约束。然后基于ICFET以上下文敏感和路径敏感的方式进行别名分析和数据流分析,跟踪每个指定类型的每个对象的流,以识别可能在对象上发生的事件序列。最后根据ICFET以及别名分析和数据流分析产生的程序图,进行基于约束的图可达性计算,如果可达边能够到达有限状态机中未定义或错误状态,则存在可以将一个对象或一组对象驱动到规范上的未定义或错误状态的事件序列,生成错误报告。本专利技术提出的方法由前端和后端构成,前端由两个基于编译器的图形生成器组成,它们将程序转换为两个不同的图形表示,一个用于别名分析,另一个用于数据流分析。后端是一个基于磁盘的图形引擎,利用快速SSD处理非常大的输入图形,对前端产生的图形进行基于约束的图可达性计算。该方法包含的步骤为:1)使用符号执行来创建静态过程间控制流执行树(ICFET),获得路径约束。1.1)首先,对于程序中的每个方法生成过程内控制流执行树(CFET),以表示方法中的所有可能的控制流路径。然后定义基于区间的过程内过程内编码/解码算法,控制流路径可以唯一地表示为CFET上的区间,其可以简洁地编码为一对整数,图中的每条边不携带布尔公式,而是包含约束的基于区间的编码,该编码可以作为在图计算期间快速定位路径并计算其约束的指标。在解码时,对于编码区间[IDstart,IDend],从IDend后序遍历到IDstart,将每个节点的约束进行合取即可获得解码后的路径约束信息。1.2)通过增加call/return边来扩展CFET,为其增加过程间路径约束,生成过程间控制流执行树(ICFET)。增加call/return边是从调用点连接call边到被调用方法的根节点,从被调用方法的每个方法返回处连接return边回到调用处。然后扩展过程内路径编码/解码算法,给出过程间路径编码/解码算法来表示过程间路径约束信息。为了有效地对过程间路径进行编码,我们通过将路径表示为区间的序列来扩展过程内路径编码算法,每个区间表示方法中的路径片段。通过对每个区间重复执行过程内路径解码算法,可以对过程间路径进行解码。2)对程序进行别名分析,将程序转化成包含别名信息的图形,为后续的别名计算做准备。2.1)对程序中每个方法分别进行过程内分析。给定适用于别名分析的上下文无关语法来指定分析必须遵循的约束,在执行期间,分析遍历图以找到其标签与语法规则匹配的路径,并在这些路径上添加传递边,同时根据过程内路径编码算法计算每条边的路径编码来表示需要满足的路径约束信息。2.2)对于出现在多个基本块中的每个变量v(如b1,b2,…,bn),如果在ICFET上从块bi到bj存在路径,我们为每个这样的基本块bi创建单独的顶点vi,并且从vi到vj人工加边。2.3)给定过程内程序图,基于预先计算的上下文不敏感调用图,以自下而上的方式增加相应的call/return边,并根据过程间路径编码算法计算其路径编码,然后将被调用方法程序图克隆到调用方法中来实现内联。3)对程序进行数据流分析,将程序转换为相应的图的形式。该过程与步骤2类似:3.1)根据数据流分析的上下文无关语法进行过程内分析。3.2)对于出现在多个基本块中的每个变量v(如b1,b2,…,bn),如果在ICFET上从块bi到bj存在路径,我们为每个这样的基本块bi创建单独的顶点vi,并且从vi到vj人工加边。3.3)给定过程内程序图,基于预先计算的上下文不敏感调用图,以自下而上的方式增加相应的call/return边,并根据过程间路径编码算法计算其路径编码,然后将被调用方法程序图克隆到调用方法中来实现内联。4)对步骤2和步骤3产生的两个程序图进行基于路径约束的图可达性计算。4.1)将ICFET完全加载到存储器中。4.2)将输入图分割成存储在磁盘上的一组较小的分区。4.3)进行以一对边为中心的计算,即每次检查一对边,根据路径解码算法获取这一对边的路径约束,对其计算合并约束并产生新的编码。在每次迭代中,两个边分区被加载到内存中。4.4)在每次迭代结束后,处理相关工作。然后,调度器选择两个其他分区加载到内存中进行下一次迭代。计算迭代直到找不到新的边。有益效果:本专利技术提出一种用于大规模系统中状态相关缺陷的静态检测方法,具有如下的有益效果:(1)本专利技术所述的一种用于大规模系统中状态相关缺陷的静态检测方法中,以上下文敏感和路径敏感的方式进行别名分析和数据流分析,能够有效的以消除不可行的别名关系和不可达的数据流,提高缺陷检测的精准度。(2)本专利技术所述的一种用于大规模系统中状态相关缺陷的静态检测方法中,后端选择基于硬盘的图形引擎来进行基于约束的图可达性计算,使其能够对大规模的数据进行精确的计算。(3)本专利技术所述的一种用于大规模系统中状态相关缺陷的静态检测方法中,整个方法在单机环境运行,使得开发人员可以每天使用,可以在他们自己的台式机/笔记本电脑上执行代码检查而无需访问集群。(4)本专利技术所述的一种用于大规模系统中状态相关缺陷的静态检测方法中,提出一本文档来自技高网...

【技术保护点】
1.一种用于大规模系统中状态相关缺陷的静态检测方法,其特征在于:该方法首先将大规模系统中与状态相关的缺陷抽象为有限状态机表示的形式;其次基于符号执行技术产生过程间控制流执行树(ICFET),并提出了一个新的基于区间的路径编码/解码算法来表示路径约束;然后基于ICFET以上下文敏感和路径敏感的方式进行别名分析和数据流分析,跟踪每个指定类型的每个对象的流,以识别可能在对象上发生的事件序列;最后根据ICFET以及别名分析和数据流分析产生的程序图,进行基于路径约束的图可达性计算,如果可达边能够到达有限状态机中未定义或错误状态,则存在可以将一个对象或一组对象驱动到规范上的未定义或错误状态的事件序列,生成错误报告。

【技术特征摘要】
1.一种用于大规模系统中状态相关缺陷的静态检测方法,其特征在于:该方法首先将大规模系统中与状态相关的缺陷抽象为有限状态机表示的形式;其次基于符号执行技术产生过程间控制流执行树(ICFET),并提出了一个新的基于区间的路径编码/解码算法来表示路径约束;然后基于ICFET以上下文敏感和路径敏感的方式进行别名分析和数据流分析,跟踪每个指定类型的每个对象的流,以识别可能在对象上发生的事件序列;最后根据ICFET以及别名分析和数据流分析产生的程序图,进行基于路径约束的图可达性计算,如果可达边能够到达有限状态机中未定义或错误状态,则存在可以将一个对象或一组对象驱动到规范上的未定义或错误状态的事件序列,生成错误报告。2.根据权利要求1所述的用于大规模系统中状态相关缺陷的静态检测方法,其特征在于:所述的基于区间的路径编码/解码技术来有效地表示路径约束,具体步骤为:首先,对于程序中的每个方法生成过程内控制流执行树(CFET),以表示方法中的所有可能的控制流路径,并定义了过程内路径编码/解码算法;然后通过增加call/return边扩展过程内控制流执行树(CFET)生成过程间控制流执行树(ICFET),从调用点连接call边到被调用方法的根节点,从被调用方法的每个方法返回处连接return边回到调用处;同样的,通过扩展过程内路径编码/解码算法实现了过程间路径编码/解码算法来有效的表示路径约束。3.根据权利要求1所述的用于大规模系统中状态相关缺陷的静态检测方法,其特征在于:所述基于ICFET以上下文敏感和路径敏感的别名分析,具体步骤为:对程序中每个方法分别进行过程内分析;基于给定的上下文无关语法来指定分析必须遵循的约束,分析遍历图以找到其标签与语法规则匹配的路径,并在这些路径上添加传递...

【专利技术属性】
技术研发人员:左志强潘秋红陆申明王乙飞王林章李宣东
申请(专利权)人:南京大学
类型:发明
国别省市:江苏,32

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

1