一种高可扩展性和可维护性的源代码缺陷检测方法及装置制造方法及图纸

技术编号:4300850 阅读:319 留言:0更新日期:2012-04-11 18:40
本发明专利技术提供一种高可扩展性和可维护性的源代码缺陷检测方法及装置,包括下列步骤:(1)将用户配置好的需要进行检测的源代码转化成抽象语法树以及控制流图,送入分析引擎;(2)根据抽象语法树以及控制流图,对源代码进行流不敏感的分析,把分析结果提交给缺陷报告模块,然后进入步骤3,进行路径敏感的分析;(3)根据抽象语法树以及控制流图对源代码进行各种路径敏感的建模和分析,生成缺陷原始信息;(4)根据缺陷原始信息,对缺陷路径进行还原、精简、报告给用户。装置包括三个功能模块:编译器前端、分析引擎、缺陷报告模块。本发明专利技术的目的提供了一种源代码缺陷检测方法及装置具有高度的可扩展性、可维护性强和模块化等特点。

【技术实现步骤摘要】

本专利技术涉及一种在软件源代码中检测缺陷的技术,属于计算机信息安全技术领 域。
技术介绍
源代码缺陷检测工具是相当复杂的软件系统,其复杂度不亚于一个产品级的C/ C++编译器。在大型软件系统中,系统架构的设计直接决定系统的质量和可持续开发能力。 现有的一些开源检测工具,我们发现多数工具都将语法处理,检测,和错误报告等功能混合 在一起。这样的一体化结构虽然在开发时难度较低,但可扩展性和可维护性都不好。建立 执行状态图时,相关检测工具都会遇到状态过多导致存储爆炸的问题,此问题是相关的检 测工具共同遇到的问题。
技术实现思路
本专利技术的目的提供了一种源代码缺陷检测方法及装置具有高度的可扩展性、可维 护性强和模块化等特点。为实现上述专利技术目的,本专利技术所提供的技术方案的基本构思如下IV09-175本专利技术提供一种高可扩展性和可维护性的源代码缺陷检测方法,其特殊之处在 于包括下列操作步骤(1)将用户配置好的需要进行检测的源代码转化成抽象语法树以及控制流图,送 入分析引擎,该分析引擎开始工作;(2)根据抽象语法树以及控制流图,对源代码进行流不敏感的分析,把分析结果提 交给缺陷报告模块,然后进入步骤3,进行路径敏感的分析;(3)根据抽象语法树以及控制流图对源代码进行各种路径敏感的建模和分析,生 成缺陷原始信息;(4)根据缺陷原始信息,对缺陷路径进行还原、精简、报告给用户。所述步骤(3)对源代码进行各种路径敏感的建模和分析由循环的工作队列算法 执行,所述循环的工作队列算法由控制要素控制。所述工作队列算法的操作如下(31)根据不同的语句类别,调用传输函数中相应 的访问函数对语句进行处理和求值;(32)处理分支语句判断当前分支上的约束条件是否 可以满足,如果可满足则执行当前分支,如果不可满足则不执行当前分支;处理赋值语句 更新赋值语句中被赋值变量的值;处理函数调用语句语句计算被调用函数的副作用和返 回值;(33)对每一个执行状态用hash算法计算该执行状态的hash值,hash值对每一个不 同的执行状态都是唯一的;如果一个执行状态的hash值跟已有的执行状态的hash值相等, 则表明该执行状态是一个重复出现的状态,则不再存储状态,如果hash值不相等,则顺序 执行后续操作;(34)存储所有的执行状态;(35)对存储的执行状态进行建模;(36)对执行 状态进行各种检测,生成缺陷原始信息。所述控制要素包括根据抽象语法树以及控制流图对源代码建立所有执行路径的 执行状态图,并驱动检测器对执行状态图进行遍历;对源程序的每个分支进行遍历;控制 源程序的循环语句的循环执行的最大次数;所述执行状态图为一个基于函数控制流图的程序执行图,记录函数每条可能执行 路径上的执行情况。所述步骤(33) —个执行状态包括所有已求值的表达式的值,所有变量和动态分 配的内存块的值,所有符号的相关约束信息,所有检查器所需要的信息。所述步骤(36)中各种检测的内容包括变量的值是否有定义,除数是否为0,被解 引用的指针是否为空,整数运算是否溢出,数组下标是否越界,指针算术是否合法;在路径 结束时还要检测动态分配的内存是否有泄漏,获得的锁是否释放。一种高可扩展性和可维护性的源代码缺陷检测装置,其特殊之处在于所述源代 码缺陷检测器包括有下述三个功能模块编译器前端,负责将程序源代码转化成抽象语法树以及控制流图,然后送入分析 引擎,为后续分析提供便利;分析引擎,由分别完成各自功能的六个子功能模块执行引擎、状态管理器、存储 管理器、约束管理器、检测器及传输函数组成,对源代码进行各种建模和分析,生成缺陷的 原始信息;缺陷报告模块,根据缺陷原始信息,对缺陷路径进行还原,精简,报告给用户。所述分析引擎中六个子模块的功能是执行引擎,对程序进行各种分析,根据需求调用相应的其它五个子模块完成相应 的功能;状态管理器,存储和管理所有的执行状态。存储管理器,负责对程序的存储状态进行建模,约束管理器,负责存储和求解程序路径中出现的各种约束条件。检测器,对执行状态进行各种检测,生成缺陷原始信息。传输函数,对程序中的各种语句进行处理和求值,传播执行状态。所述执行引擎对程序进行各种分析包括对源代码建立所有执行路径的执行状态 图,并驱动检测引擎对执行状态图进行遍历;对程序的每个分支进行遍历;控制循环执行 的最大次数;根据不同的语句类型,调用相应的访问函数对语句进行处理和求值;调用约 束管理器判断当前分支上的约束条件是否满足;所述状态管理器利用hash算法计算每一个执行状态的hash值,并检测执行状态 的hash值是否重复;所述存储管理器存储执行状态的信息包括保存每一块模拟的内存块到其当前值 的映射,以及每个内存块的大小,分配释放信息。与现有的技术相比,本专利技术具有以下优点及有益效果1、本专利技术的源代码缺陷检测方法及装置具有高度的可扩展性、可维护性强和模块 化等特点。2、本专利技术的各个部分被划分为相互独立的模块。模块与模块之间的交互只通过良 好定义的接口进行。这意味着可以在不改变其他模块的条件下,对某一模块进行替换,试验不同的实现。并且可以隔离bug,方便调试。3、可扩展性好意味着可以方便的对一个模块进行功能的增加,比如利用良好的接 口可以方便的增加检测器的个数。4、在核心分析引擎中,可以进行多种不同复杂度和精确度的分析,包括从流不敏 感的抽象语法树的线性遍历,到对程序路径的执行进行完整建模的符号模拟分析。5、状态管理器在存储每一个状态前,都用hash算法计算该状态的hash值,这个值 对每一个不同的状态都是唯一的。如果一个状态的hash值跟已有的状态hash值相等,则 表明该状态是一个重复出现的状态,则不再次存储该状态。这样积极的检测重复状态的出 现不仅能够减少存储消耗,更重要的是对状态空间进行消减,降低检测的时间消耗。6、本专利技术使用计算状态hash值的方法消除重复状态,解决了建立执行状态图时 遇到状态过多导致存储爆炸的问题。7、传输函数对程序中的各种语句进行求值,传播执行状态。根据检测要求的不同, 工具需要对语句进行不同的处理,有的要求对语句进行完整的模拟执行,有的则只需要粗 略的模拟,有的甚至可以直接忽略。把它们放在单独的模块中,由执行引擎根据配置需求来 调用,则大大提高了检测工具的灵活度。8、将检测工具进行模块化划分,使得工具的开发变得相对简单,不易出错。增强了 工具的灵活性,可以非常方便的对工具进行各种配置和调整。附图说明图1 是本专利技术中源代码缺陷检测方法的基本构架图;图2 是本专利技术中分析引擎的结构示意图;图3 是本专利技术中工作队列算法的操作流程图。具体实施例方式下面结合附图,对本专利技术作进一步说明。参见图1至图3 本专利技术提供一种高可扩展性和可维护性的源代码缺陷检测方法,其特殊之处在 于包括下列操作步骤(1)将用户配置好的需要进行检测的源代码转化成抽象语法树以及控制流图,送 入分析引擎,该分析引擎开始工作;(2)根据抽象语法树以及控制流图,对源代码进行流不敏感的分析,把分析结果提 交给缺陷报告模块,然后进入步骤3,进行路径敏感的分析;(3)根据抽象语法树以及控制流图对源代码进行各种路径敏感的建模和分析,生 成缺陷原始信息;所述步骤(3)对源代码进行各种路径敏感的建模和分析由循环的工作队列算法 执行本文档来自技高网...

【技术保护点】
一种高可扩展性和可维护性的源代码缺陷检测方法,其特征在于:包括下列操作步骤:(1)将用户配置好的需要进行检测的源代码转化成抽象语法树以及控制流图,送入分析引擎,该分析引擎开始工作;(2)根据抽象语法树以及控制流图,对源代码进行流不敏感的分析,把分析结果提交给缺陷报告模块,然后进入步骤3,进行路径敏感的分析;(3)根据抽象语法树以及控制流图对源代码进行各种路径敏感的建模和分析,生成缺陷原始信息;(4)根据缺陷原始信息,对缺陷路径进行还原、精简、报告给用户。

【技术特征摘要】

【专利技术属性】
技术研发人员:许中兴
申请(专利权)人:北京测腾信息技术有限公司
类型:发明
国别省市:11[中国|北京]

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

1