暂无图片
暂无图片
暂无图片
暂无图片
暂无图片
2019C程序内存泄漏智能化检测方-朱亚伟 , 左志强 , 王林章 , 李宣东法.pdf
110
12页
0次
2022-05-23
免费下载
软件学报 ISSN 1000-9825, CODEN RUXUEW E-mail: jos@iscas.ac.cn
Journal of Software,2019,30(5):13301341 [doi: 10.13328/j.cnki.jos.005715] http://www.jos.org.cn
©中国科学院软件研究所版权所有. Tel: +86-10-62562563
C 程序内存泄漏智能化检测方法
朱亚伟
,
左志强
,
王林章
,
李宣东
(计算机软件新技术国家重点实验室(南京大学),江苏 南京 210023)
通讯作者: 王林章, E-mail: lzwang@nju.edu.cn
: 内存泄漏在采用显式内存管理机制的 C 语言中是一种常见的代码缺陷,内存泄漏的检测方法目前主要是
静态分析与动态检测.动态检测开销大,且高度依赖测试用例;静态分析目前被学术界和工业界广泛应,但是存在
大量误报,需要人工对检测结果进行确认.内存泄漏静态分析的误报通常是由于对指针、分支语句和全局变量分析
的不准确性导致的.提出了一种内存泄漏的智能化检测方法,通过使用机器学习算法学习程序特征与内存泄漏之间
的相关性,构建机器学习分类器,并应用机器学习分类器进一步提高内存泄漏静态分析的准确性.首先构建机器学
分类器,然后通过静态分析方法构建从内存分配点开始的 Sparse Value Flow Graph(SVFG),并从中提取内存泄漏相
关特征,再使用规则和机器学习分类器进行内存泄漏的检.实验结果显示,该方法在分析指针、分支语句和全局
量时是有效的,能够提高内存泄漏检测的准确性,降低内存泄漏检测结果的误报.最后,未来研究的可行性以及面
临的挑战进行了展望.
关键词: 内存泄漏;内存泄漏检测;静态分析;机器学习;特征提取
中图法分类号: TP311
中文引用格式: 朱亚伟,左志强,王林章,李宣东.C 程序内存泄漏智能化检测方法.软件学报,201 9,30(5):1330 1341. http://
www.jos.org .cn/1000-9825/5715 .htm
英文引用格式: Zhu YW, Zuo ZQ, Wang LZ, Li XD. Memory leak intelligent detection method for C programs. Ruan Jian Xue
Bao/Journal of Software, 2019 ,30(5):13301341 (in Chin ese). http://www.jos.org.cn/1000-9825/5715 .htm
Memory Leak Intelligent De tection Metho d for C Programs
ZHU Ya-Wei, ZUO Zhi-Qiang, WANG Lin-Zhang, LI Xuan-Dong
(State Key Laboratory for Novel Software Technology (Nanjing University), Nanjing 210023, China)
Abstra ct : Memory leak is a common code bug for C programs which uses explicit memory management mechanisms. At present, the
main detection methods of memory leaks are static analysis and dynamic detection. Dynamic d etection has huge overhead and it is highly
dependent on test cases. Static analysis is widely used by academic and industry, but there are a large number of false positives, which
need to be manually confirmed. Inaccuracy in the analysis of pointers, branch statements, and global variables leads to false positives in
static analysis of memory leaks. In this study, an intelligent detection method is proposed for memory leak. By using machine learning
algorithms to learn the correlation between program’s features and memory leaks, a machine learning classifier is built and applied to
improve the accuracy of static analysis of memory leaks. Firstly, a machine learning classifier is trained. Then, the sparse value flow
graph (SVFG) starting from allocation should be constructed by using the static analysis, the features related to memory leaks can be
extracted from the SVFG. Lastly, the memory leaks are detected by using rules and machin e learning classifier. Experiment al results show
基金项目: 国家重点研发计划(2016YFB1000802); 国家自然科学基金(61802168, 6163201 5); 中央高校基本科研业务费专项资
(020214380047)
Foundation item: National Key Research and Development Program of China (2016YFB1000802); National Natural Science
Foundation of China (61802168, 61632015); Fund amental Research Funds for th e Central Universiti es (020214380047)
本文由智能化软件新技术专刊特约编辑申富饶教授和李戈副教授推荐.
收稿时间: 2018-08-29; 修改时间: 2018-10-31; 采用时间: 2018-12-13
朱亚伟 :C 程序内存泄漏智能化检测方法
1331
that the proposed method is effective in analyzing pointers, branch st atements, and global variables, and can reduce the false positives of
memory leak de tection. At the end of this paper, the feasibility of futur e r esearch and th e up coming challeng es are pr esented.
Key words: memory leak; memory leak detection; static analysis; machin e learning; extr acting feature
内存泄漏会严重降低软件的性能,甚至造成软件在运行时崩溃. C 语言中,内存的分配与释放都是人为控
制的,随着计算机软件的规模和复杂度的不断增加,人为的疏忽极易导致内存泄漏.由于 C 语言在计算机领域的
广泛应用,C 程序中的内存泄漏问题不可忽视.目前,内存泄漏的检测方法主要是静态分析与动态检测.
动态检测方法
[14]
需要执行程序,在程序运行的过程中对内存的分配、使用以及释放进行动态跟踪.
于动态检测能够针对当次的运行结果得到一个明确的结论,因此动态检测相对静态分析,其结果更加
准确.但是动态检测的准确性受限于测试用例,无法分析程序执行中不可达位置的错误.目前,成熟的内
存泄漏动态检测工具有 Purify
[5]
Va lg r i n d
[6]
,都存在内存开销较高和可扩展性较差的问题.
静态分析是在不实际运行程序的情况下对程序代码及其结构进行分析.针对 C 语言的内存泄漏静态分
析方法主要通过分析内存的分配点以及从内存分配点开始的不同路,在相应的路径中查找与内存
分配点对应的内存释放点,证是否所有路径都存在正确的内存释放.目前,有许多内存泄漏的静态分
析工作
[712]
,也有一些成熟的静态分析工具, Fortify
[13]
Coverity
[14]
Klocwork
[15]
,这些工具在工业界
的软件开发中应用广泛.静态分析方法又可根据流敏感、上下文敏感以及域敏感等进行分类,实现这些
静态分析方法可以在一定程度上提高内存泄漏检测的准确率,但会极大降低检测效率.
内存泄漏的静态分析目前主要缺点是:当内存泄漏中存在一些特殊案例时,会降低静态分析的准确性,导致
内存泄漏的检测出现误报或者漏报.其主要原因在于:
(1) 对分支条件缺少分析,无法识别不可达路径;对全局变量和指针的重定向未做细致分析;忽略指针偏
移问题.可以通过流敏感、上下文敏感等静态分析方法在一定程度上解决以上问题,但会造成检测效
率大幅降低.
(2) 动态数组的分配问题、链表的分配释放不匹配问题、循环或递归中指针分析的准确性问(限制循
环或递归的展开次数)会导致指针分析不准确.流敏感、上下文敏感等目前已有的静态分析方法无法
解决上述问题.
针对静态分析的上述不足,本文利用机器学习算法以提高内存泄漏静态分析的准确性,获得更加准确的内
存泄漏检测结果.本文利用已有的内存泄漏案例,即含有标签为虚假内存泄漏和真实内存泄漏的两类数据集,
过使用机器学习算法进行训练,构建内存泄漏分类器以分析程序特征与内存泄漏的相关性.
本文的主要贡献在于:
(1) 本文提出一种 C 程序内存泄漏智能化检测方法,该方法基于静态分析提取内存泄漏相关特征,能够提
高内存泄漏检测的准确性,减少误报和漏报.
(2) 我们实现了内存泄漏的智能化检测工具 I_Mem.该工具使用多种机器学习算法构建内存泄漏检测模
,并基于静态分析提取内存泄漏相关特征,能够提高内存泄漏检测的准确性.
(3) 我们在 LLVM-4.0.0 上实现了 I_Me m, 并利用 4 个开源的 C 程序(
2KLOC )进行实验评估.I_Mem 总共
发现了 114 个内存泄漏,漏报为 4 ,误报为 13 ,准确率为 85.6%.
本文第 1 节主要介绍背景知识. 2 节介绍 C 程序内存泄漏智能化检测方法,包括方法的基本框架、内存
泄漏模型的构建、特征提取与缺陷检测. 3 节对本文实现的工具 I_Me m 进行实验和评估. 4 节主要介绍相
关工作,包括内存泄露的静态分析方法、内存泄露的动态检测技术和基于机器学习的缺陷检测. 5 节进行总
结和展望.
1
针对内存泄漏的程序静态分析需要在获取所有内存分配点后,关注内存的定义、使用及释放.此外,C 语言
of 12
免费下载
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文档的来源(墨天轮),文档链接,文档作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

关注
最新上传
暂无内容,敬请期待...
下载排行榜
Top250 周榜 月榜