[发明专利]一种基于机器学习的C程序内存泄漏智能化检测方法有效
申请号: | 201810613423.9 | 申请日: | 2018-06-14 |
公开(公告)号: | CN108804332B | 公开(公告)日: | 2021-12-17 |
发明(设计)人: | 王林章;朱亚伟;李宣东 | 申请(专利权)人: | 南京大学 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 南京知识律师事务所 32207 | 代理人: | 张苏沛 |
地址: | 210023 江苏*** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 机器 学习 程序 内存 泄漏 智能化 检测 方法 | ||
本发明公开一种基于机器学习的C程序内存泄漏智能化检测方法,分为三个阶段:模型构建阶段,根据已有的内存泄漏构建两个数据集,分别从两个数据中提取内存泄漏特征,将内存泄漏特征输入机器学习的分类器进行训练,交叉验证,修改分类器类型及参数,选取分类准确率最高的作为分类器模型来检测内存泄漏。程序分析与特征获取阶段,对源程序进行预分析,获取所有的内存分配点o,然后进行指针分析,构建从o开始的VFG(ValueFlowGraph),提取VFG中每条路径对应的内存泄漏特征。缺陷检测与报告阶段,将程序分析与特征获取阶段的内存泄漏特征输入到模型构建阶段的分类器模型中进行检测,判断从o开始的路径中是否存在内存泄漏,得到内存泄漏报告。
技术领域
本发明涉及一种内存泄漏的检测方法,使用程序静态分析方法和机器学习算法,实现内存泄漏的检测,属于软件工程领域。
背景技术
在计算机科学领域,程序静态分析是指在没有实际执行程序的情况下对计算机软件进行分析。在大多数情况下,分析实在某个版本的源代码上执行的额,其他情况下则是某种形式的目标代码。机器学习算法常见的有决策树、随机森林、逻辑回归、SVM、朴素贝叶斯等。SVM的优点在于他简化了通常的分类和回归问题,它计算的复杂性取决于支持向量的数目,而不是样本空间的维数,因此SVM不但算法简单且具有很好的鲁棒性。
目前内存泄漏的检测主要采用两种方法:静态分析,动态检测。静态分析可以自动化运行,速度快,但存在大量的误报;动态检测结果准确,但开销高,依赖测试用例。本发明采用了基于机器学习的方法,在静态分析的基础上,提取内存泄露特征,并通过机器学习的方法进行分类器模型的训练以及目标程序的检测。可以保证内存泄漏检测速度快以及检测结果的高准确率。
发明内容
目前的内存泄漏检测方法,通常采用静态分析和动态检测,静态分析误报太多,且无法解决C语言中的一些复杂结构造成的内存泄漏,动态检测开销高。
本发明为解决上述技术问题采用以下技术方案:一种基于机器学习的C程序内存泄漏智能化检测方法,包括以下步骤:
步骤1)根据已有的内存泄漏构建两个数据集,一个是包含真正的内存泄漏的数据集,另一个是包含虚假的内存泄漏的数据集。
步骤2)提取内存泄漏特征。内存泄漏特征包括两类:类型信息以及指针信息。
步骤3)构建分类器模型,具体步骤如下:
步骤3.1)将提取的内存泄漏特征作为训练集输入到分类器中。
步骤3.2)在训练过程中进行交叉验证,查看分类器分类的准确率。
步骤3.3)调整分类器参数,重复3.1,3.2步骤,若分类准确率超过设定目标值,则记录当前分类器的类型、参数及其准确率。
步骤3.4)调整分类器的类型,重复3.1,3.2,3.3步骤。
步骤3.5)在当前记录的分类器中选取准确率最高的分类器类型及参数,确定唯一的分类器模型。
步骤4)程序预分析,具体步骤如下:
步骤4.1)对于需要检测的C程序,将其转化为LLVM的中间码(.bc文件)。
步骤4.2)在LLVM中间码上获取所有的内存分配点o。
步骤5)程序指针分析,具体步骤如下:
步骤5.1)对每个函数使用流不敏感、上下文不敏感、域敏感以及调用点敏感的安德森指针分析,获取每个指针指向的内存区域集合。每个指针的指向集用ps表示,格式如下:
ps(v)={o,o′}
v表示指针变量,ps(v)表示指针v指向的内存区域,{o,o′}表示内存区域o和o′的集合。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于南京大学,未经南京大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201810613423.9/2.html,转载请声明来源钻瓜专利网。
- 上一篇:一种自动化测试用例的自动排序方法
- 下一篇:一种测试用例与CQ关联方法及系统