【技术实现步骤摘要】
一种基于类型区域模型的内存缺陷静态检测方法
[0001]本专利技术涉及软件安全与程序静态检测
,具体涉及一种基于类型区域模型的内存缺陷静态检测方法。
技术介绍
[0002]软件缺陷主要由编程规范不严谨和经验不足等人为因素引入的,如果不能及时找出该缺陷,随着软件开发的进行,将会大幅度地增加后期维护成本;部分缺陷可能导致资源浪费、系统奔溃,甚至成为黑客入侵的入口。在信息化时代下,软件缺陷造成的范围之广、程度之深远超以往,其中与内存有关的缺陷严重危害着当前软件工程的安全可靠性。内存相关缺陷主要包括:内存重复释放、释放后使用和内存泄漏;这些缺陷是影响目前软件稳定性、可靠性和安全性的主要原因,它们不仅会给开发公司带来严重的经济损失,还会对用户的个人隐私信息和财产安全构成威胁。
[0003]针对不同形式程序,目前学者提出的缺陷检测方法主要可以分为两大类:动态检测方法与静态检测方法,两者主要根据检测时是否运行程序进行区分。动态检测方法是目前工业界广泛采用的软件缺陷检测技术。该技术使用特定的测试用例来运行程序,通过关注程序在执 ...
【技术保护点】
【技术特征摘要】
1.一种基于类型区域模型的内存缺陷静态检测方法,其特征在于,具体包括以下步骤:S1、通过前端处理获得待检测程序的预处理产物:函数调用图和控制流程图;S2、基于预处理产物构建类型区域模型,进行静态分析,并在分析后对模型和程序状态进行更新;S3、基于类型区域模型进行内存缺陷检测:根据当前程序点可能发生的缺陷行为和静态分析携带的程序状态信息,进入到某一缺陷类型的检测流程。2.根据权利要求1所述的基于类型区域模型的内存缺陷静态检测方法,其特征在于,所述程序的预处理产物通过以下前端处理方法生成:S11、扫描待检测程序的源代码,在编译阶段进行词法分析、语法分析和语义分析,对程序进行初步检查,判断是否存在词法、语法或语义错误,同时进行宏展开和条件编译,建立抽象语法树;S12、基于抽象语法树的结构,搜索函数声明和函数调用语句,生成函数调用图;并根据抽象语法树的控制流结构语句对抽象语法树进行控制封装,构建控制流程图。3.根据权利要求1所述的基于类型区域模型的内存缺陷静态检测方法,其特征在于,还包括对预处理产物的进一步处理:根据当前程序的控制流程图,记录每一个函数声明,并依次探索每一个函数调用语句,当某个函数声明存在一条跳转到被调用函数的语句时,则将该调用者作为被调用者的前驱节点;由此重复构图,构建拓扑排序图;同时根据内存缺陷的发生原因与形式,在控制流程图中对各个语句进行分类:赋值语句、函数调用语句、循环语句以及类型转换语句,并对可能引发缺陷的疑似点进行标记;并将这些疑似点所在的语句或位置的分析接口中,注册对应的缺陷检测规则,当需要分析该语句时,在调用该接口的同时会进入到缺陷检测流程,以进行缺陷检测分析。4.根据权利要求3所述的基于类型区域模型的内存缺陷静态检测方法,其特征在于,所述类型区域模型的构建以及静态分析具体包括以下步骤:S21、根据控制流图信息,为每一个初次声明的函数变量进行建模,并分配区域:区域中保留当前变量所具有的类型与值信息,对于指针和堆内存额外记录当前变量的状态,同时记录变量在分析时的地址;S22、初始化状态池为空,并以分析入口处的程序状态加入到状态池中;S23、如果状态池为空,则分析结束;如果状态池不为空,则依据不同的选择策略,默认为广度优先遍历,从状态池中选择一个状态,继续程序分析;S...
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。