一种基于符号化函数摘要的静态分析方法及系统技术方案

技术编号:9959867 阅读:221 留言:0更新日期:2014-04-23 19:54
本发明专利技术公开了一种基于符号化函数摘要的静态分析方法,该方法包括:利用RSTVL模型,描述当前函数的控制流图的节点的变量的存储状态;确定函数的当前节点为非最后节点且当前节点存在函数调用时,将被当前函数调用的函数的函数摘要进行实例化,并更新当前函数中受函数调用影响的变量;确定函数的当前节点为最后节点且确定当前函数具有函数返回值时,获得所述函数返回值的符号表达式,查找出存储状态发生变化的变量,并获取存储状态发生变化的变量的符号表达式;将所述函数返回值的符号表达式与存储状态发生变化的变量中的外部变量的符号表达式添加到当前函数的函数摘要中;同时,本发明专利技术还公开了基于符号化函数摘要的静态分析系统。利用本发明专利技术实施例的技术方案,可有效提高静态分析的精度效率。

【技术实现步骤摘要】
一种基于符号化函数摘要的静态分析方法及系统
本专利技术涉及到静态分析技术,具体涉及到基于符号化函数摘要的静态分析方法及系统。
技术介绍
通过对软件程序进行测试可以发现程序自身的不足与缺陷。其中,软件测试方法包括:静态分析及动态分析方法。静态分析方法也称为静态测试,指的是不实际运行被测软件,而是通过对源程序的扫描发现可能导致程序的结构异常、控制流异常及数据流异常等情况。由此可见,对程序进行静态测试是保证软件质量的一个重要环节。同时,由于静态分析方法具有成本低、实现简单、可覆盖所有路径等优势而备受青睐。分析精确度与分析效率是评价静态分析方法的两个重要指标。目前的过程间静态分析方法包括:过程内联、记录函数调用串、函数摘要等;其中,基于函数摘要的静态分析方法能够实现对程序上下文的敏感分析,但是由于程序中通常含有较多的多级指针变量、复合变量等复杂的数据类型变量,导致了分析精度与分析效率均不够高。
技术实现思路
有鉴于此,本专利技术实施例的主要目的在于提供一种基于符号化函数摘要的静态分析方法及系统,能够提高静态分析的精度及效率。为达到上述目的,本专利技术实施例的技术方案是这样实现的:本专利技术实施例提供了一种基于符号化函数摘要的静态分析方法,所述方法包括:利用基于区域的符号化三值逻辑RSTVL模型,描述当前函数的控制流图的节点的变量的存储状态;依据所述控制流图,确定所述函数的当前节点为非最后节点且所述当前节点存在函数调用时,将被当前函数调用的函数的函数摘要进行实例化,并更新所述RSTVL模型中受函数调用影响的变量;确定所述函数的当前节点为最后节点且确定所述当前节点具有函数返回值时,获取所述函数返回值的符号表达式;查找出存储状态发生变化的变量,并获取存储状态发生变化的变量的符号表达式;将所述函数返回值的符号表达式与存储状态发生变化的变量中的外部变量的符号表达式添加到当前函数的函数摘要中。上述方案中,所述利用基于区域的符号化三值逻辑RSTVL模型,描述当前函数的控制流图的节点的变量的存储状态,包括:对所述当前函数的参数及所述当前函数使用的全局变量生成扩充变量;利用所述RSTVL模型,描述所述当前函数的参数及所述全局变量分别占用的内存区域、分别对应的符号表达式、以及各自的取值区间;将所述当前函数的参数及所述全局变量的扩充变量分别占用的内存区域、分别对应的符号表达式、以及各自的取值区间描述为变量的存储状态。上述方案中,所述对当前函数的参数及所使用的全局变量生成扩充变量,包括:基于定义-使用链,识别出被所述当前函数使用的全局变量,所述全局变量为复合类型时,扩充出所述全局变量的每个成员变量;全局变量为指针类型时,扩充出所述全局变量的每一级指针变量;所述当前函数的参数为复合类型时,扩充出所述参数的每个成员变量,所述参数为指针类型时,扩充出所述参数的每一级指针变量。上述方案中,在所述将被当前函数调用的函数的函数摘要进行实例化之前,所述方法还包括:生成所述被当前函数调用的函数的函数摘要。上述方案中,所述生成所述被当前函数调用的函数的函数摘要,包括:将所述被当前函数调用的函数作为被调用函数;基于所述被调函数的RSTVL模型,获取所述被调函数的参数的符号表达式、全局变量的符号表达式;确定由所述被调函数指针类型的参数扩充出的变量在所述被调函数的函数出口处及函数入口处不一致时,将所述扩充变量及其对应的符号表达式添加到所述被调函数的函数摘要中;确定所述全局变量的取值区间在所述被调函数的函数出口处及函数入口处不一致时,将所述全局变量及其对应的符号表达式添加到所述被调函数的函数摘要中;所述被调函数存在有函数返回值时,依据所述RSTVL模型,获取所述函数返回值的符号表达式,并将所述符号表达式添加到所述函数摘要中。上述方案中,所述方法还包括:对于所述被调用函数的参数、全局变量、函数返回值的符号表达式中的每个符号,获取所述符号的取值区间;当该取值区间类型为指针类型时,且该指针类型区间的指向集合中存在有区域编号标识的区域是局部变量的区域时,将该区域编号替换为表示野指针的区域编号;指针类型区间的指向集合中未存在区域编号标识的区域是局部变量的区域时,将该指针类型区间的指向集合中的区域编号与具有该区域编号的区域所对应的变量添加到函数摘要中;当该取值区间类型为非指针类型时,获取所述符号对应的变量;所述符号对应的变量为局部变量时,将所述符号与所述符号的取值区间添加到函数摘要中;所述符号对应的变量为非局部变量时,将所述符号与所述符号对应的变量添加到函数摘要中。上述方案中,所述将被当前函数调用的函数的函数摘要进行实例化,包括:基于所述当前函数在函数调用点处的上下文环境,获取所述被当前函数调用的函数的形参与所述当前函数的实参之间的对应关系;获得实参对应的符号表达式,并依据所述对应关系,将实参对应的符号表达式替换形参的符号表达式中的符号。上述方案中,所述获取所述被当前函数调用的函数的形参与所述当前函数的实参之间的对应关系,包括:当所述被当前函数调用的函数的形参有父变量时,获取所述父变量对应的实参,并依据所述形参的表达式类型与所述父变量对应的实参,获取所述形参对应的实参;当所述被当前函数调用的函数的形参没有父变量时,依据所述当前函数与所述被当前函数调用的函数之间的变量对应关系,确定与所述形参对应的实参。上述方案中,所述方法还包括:在所述RSTVL模型中,当函数返回值由符号表达式来描述时,获得符号化表达式中的每一个符号,所述符号对应于所述当前函数的变量时,获得所述符号对应的变量,基于形参与实参的对应关系,获得该变量对应的实参,根据所述当前函数在调用点的上下文环境,获得该实参对应的符号表达式,用实参对应的符号表达式替换形参的符号表达式中的符号;所述符号对应于所述被当前函数调用的函数的局部变量生成的符号,从所述被当前函数调用的函数的函数摘要中获取所述符号对应的取值区间,该取值区间为指针类型区间时,基于所述函数摘要对指针类型区间的指向集合进行实例化。上述方案中,所述方法还包括:当所述当前函数的函数返回值由取值区间标识,且当所述取值区间为指针类型区间时,对该指针类型区间的指向集合进行实例化。本专利技术实施例还提供了一种基于符号化函数摘要的静态分析系统,所述系统包括:描述单元,用于利用基于区域的符号化三值逻辑RSTVL模型,描述当前函数的控制流图的节点的变量的存储状态;第一实例化单元,用于依据所述控制流图,确定所述函数的当前节点为当前函数的非最后节点且所述当前节点存在函数调用,将被当前函数调用的函数的函数摘要进行实例化,并更新所述RSTVL模型中受函数调用影响的变量;第二实例化单元,用于所述函数的当前节点为当前函数的最后节点且确定所述当前节点具有函数返回值时,获取所述函数返回值的符号表达式,查找出存储状态发生变化的变量,并获取存储状态发生变化的变量的符号表达式;将所述函数返回值的符号表达式与存储状态发生变化的变量中的外部变量的符号表达式添加到当前函数的函数摘要中。上述方案中,所述系统还包括:生成单元,用于生成所述被当前函数调用的函数的函数摘要。上述方案中,所述生成单元,还用于:将所述被当前函数调用的函数作为被调函数;基于所述被调函数的RSTVL模型,获取所述被调函数的参本文档来自技高网...
一种基于符号化函数摘要的静态分析方法及系统

【技术保护点】
一种基于符号化函数摘要的静态分析方法,其特征在于,所述方法包括:利用基于区域的符号化三值逻辑RSTVL模型,描述当前函数的控制流图的节点的变量的存储状态;依据所述控制流图,确定所述函数的当前节点为非最后节点且所述当前节点存在函数调用时,将被当前函数调用的函数的函数摘要进行实例化,并更新所述RSTVL模型中受函数调用影响的变量;确定所述函数的当前节点为最后节点且确定所述当前节点具有函数返回值时,获取所述函数返回值的符号表达式;查找出存储状态发生变化的变量,并获取存储状态发生变化的变量的符号表达式;将所述函数返回值的符号表达式与存储状态发生变化的变量中的外部变量的符号表达式添加到当前函数的函数摘要中。

【技术特征摘要】
1.一种基于符号化函数摘要的静态分析方法,其特征在于,所述方法包括:利用基于区域的符号化三值逻辑RSTVL模型,描述当前函数的控制流图的节点的变量的存储状态;依据所述控制流图,确定所述函数的当前节点为非最后节点且所述当前节点存在函数调用时,将被当前函数调用的函数的函数摘要进行实例化,并更新所述RSTVL模型中受函数调用影响的变量;确定所述函数的当前节点为最后节点且确定所述当前节点具有函数返回值时,获取所述函数返回值的符号表达式;查找出存储状态发生变化的变量,并获取存储状态发生变化的变量的符号表达式;将所述函数返回值的符号表达式与存储状态发生变化的变量中的外部变量的符号表达式添加到当前函数的函数摘要中。2.根据权利要求1所述的符号化函数摘要的静态分析方法,其特征在于,所述利用基于区域的符号化三值逻辑RSTVL模型,描述当前函数的控制流图的节点的变量的存储状态,包括:对所述当前函数的参数及所述当前函数使用的全局变量生成扩充变量;利用所述RSTVL模型,描述所述当前函数的参数及所述全局变量分别占用的内存区域、分别对应的符号表达式、以及各自的取值区间;将所述当前函数的参数及所述全局变量的扩充变量分别占用的内存区域、分别对应的符号表达式、以及各自的取值区间描述为变量的存储状态。3.根据权利要求2所述符号化函数摘要的静态分析方法,其特征在于,所述对当前函数的参数及所使用的全局变量生成扩充变量,包括:基于定义-使用链,识别出被所述当前函数使用的全局变量,所述全局变量为复合类型时,扩充出所述全局变量的每个成员变量;全局变量为指针类型时,扩充出所述全局变量的每一级指针变量;所述当前函数的参数为复合类型时,扩充出所述参数的每个成员变量,所述参数为指针类型时,扩充出所述参数的每一级指针变量。4.根据权利要求1所述的符号化函数摘要的静态分析方法,其特征在于,在所述将被当前函数调用的函数的函数摘要进行实例化之前,所述方法还包括:生成所述被当前函数调用的函数的函数摘要。5.根据权利要求4所述的符号化函数摘要的静态分析方法,其特征在于,所述生成所述被当前函数调用的函数的函数摘要,包括:将所述被当前函数调用的函数作为被调用函数;基于所述被调函数的RSTVL模型,获取所述被调函数的参数的符号表达式、全局变量的符号表达式;确定由所述被调函数指针类型的参数扩充出的变量在所述被调函数的函数出口处及函数入口处不一致时,将所述扩充变量及其对应的符号表达式添加到所述被调函数的函数摘要中;确定所述全局变量的取值区间在所述被调函数的函数出口处及函数入口处不一致时,将所述全局变量及其对应的符号表达式添加到所述被调函数的函数摘要中;所述被调函数存在有函数返回值时,依据所述RSTVL模型,获取所述函数返回值的符号表达式,并将所述符号表达式添加到所述函数摘要中。6.根据权利要求5所述的符号化函数摘要的静态分析方法,其特征在于,所述方法还包括:对于所述被调用函数的参数、全局变量、函数返回值的符号表达式中的每个符号,获取所述符号的取值区间;当该取值区间类型为指针类型时,且该指针类型区间的指向集合中存在有区域编号标识的区域是局部变量的区域时,将该区域编号替换为表示野指针的区域编号;指针类型区间的指向集合中未存在区域编号标识的区域是局部变量的区域时,将该指针类型区间的指向集合中的区域编号与具有该区域编号的区域所对应的变量添加到函数摘要中;当该取值区间类型为非指针类型时,获取所述符号对应的变量;所述符号对应的变量为局部变量时,将所述符号与所述符号的取值区间添加到函数摘要中;所述符号对应的变量为非局部变量时,将所述符号与所述符号对应的变量添加到函数摘要中。7...

【专利技术属性】
技术研发人员:宫云战金大海黄俊飞王雅文董玉坤
申请(专利权)人:北京邮电大学
类型:发明
国别省市:北京;11

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

1