260 likes | 373 Vues
在此输入文字标题. 模型检测技术在程序内存泄漏检测中的应用. 1. 答辩人:陈宇星 指导老师:洪玫 学号:1043111331. 1 、 研究背景和研究意义 2 、 主要工作 3 、 系统化文献综述和文献计量分析方法 4 、 文献计量分析结果 5 、 文献综述 6、 面临的挑战与总结 。. 目 录. 研究背景和研究意义. 研究背景:
E N D
在此输入文字标题 模型检测技术在程序内存泄漏检测中的应用 1 答辩人:陈宇星 指导老师:洪玫 学号:1043111331
1、研究背景和研究意义 2、主要工作 3、系统化文献综述和文献计量分析方法 4、文献计量分析结果 5、文献综述 6、面临的挑战与总结 。 目 录
研究背景和研究意义 研究背景: 软件开发常用的动态内存管理技术,使得程序的设计更自由更灵活,但是,它也很容易造成内存管理漏洞,特别是内存泄漏问题。内存泄漏的堆积会导致程序运行异常甚至崩溃,并且在调试过程中是很难定位和解决的,因此内存泄漏检测是一个长期热门的研究课题。而模型检测技术是基于对程序所有可能执行路径的尽可能的仿真,从而检测出程序中潜在的漏洞,所以可以将模型检测技术用于程序内存泄漏检测中。 研究意义: 国内外学者们针对内存泄漏检测这一课题作出了大量的研究,因此这篇论文主要关注于模型检测技术在程序内存泄漏检测上的应用,通过整理学者们历年来在这方面的研究成果,来给出“现已有的应用了模型检测技术的内存泄漏检测方法和工具有哪些?”、“其他流行的内存泄漏检测方法和工具”等问题的回答。 这篇论文明确了学者们正在研究关于这个领域的什么问题、有何研究成果以及尚未解决的问题。因此,可以为研究学者们下一步的研究课题提供综合性的参考,也能为工业界应用这个领域的技术提出一个决策的依据。
1. 明确研究问题,制定综述方案 2. 检索相关文献 3. 文献筛选 4. 提取并分析数据(文献计量分析) 5. 阅读文献,整理归纳,完成综述 主要工作
系统化文献综述(systematic literature review)是一种针对某一研究问题开展的基于文献的系统化综述方法。一开始主要用于医学领域以及社会学研究领域,在2004年被引入了软件工程领域,主要包含了制定综述方案、展开文献综述、完成综述报告等三个阶段。 数据来源 搜索引擎:Google Scholar数据库:IEEE Digital Library,Web of Science,CNKI 筛选原则 1. 消重 2. 阅读题目和摘要 3. 精筛 采用EndNote来管理论文库,经过消重后,论文库中共155篇文献,经过精筛后,还剩53篇论文。 系统文献综述 和 文献计量分析 文献计量学(Bibliometrics)方法是利用数理统计学方法来定量的描述、评价以及预测学术现状及其发展趋势的图书情报学。 分析工具: BibExcel、 Pajek、VOSViewer
。 结论:论文发表情况总体呈增长趋势,尤其是在2007--2009年是关于这个主题的发表的论文是最多的时期,而2014年由于正处于年初,因此发表论文篇数暂时只有一篇,造成了下降的趋势。 • 4、文献计量分析结果——年限分析 年限分析图
结论:文献类型主要是期刊文章和会议论文 结论: (图示省略了仅发表了一篇论文的期刊),从图中可以看出IEEE这个组织对这个研究主题很感兴趣,《IEEE Transaction》、《IEEE Journal》等期刊发表了多篇这方面的论文。绝大部分期刊只发表了1篇相关研究的论文。 • 4、文献计量分析结果——文献类型及期刊来源分析 文献类型分析图 文献来源期刊分析图
结论:用于分析的155篇论文共有398位作者。这个研究领域的高产作者较少,发表文献最多的作者也仅发表了4篇论文而且只有一位。91%的作者都只发表了一篇论文。结论:用于分析的155篇论文共有398位作者。这个研究领域的高产作者较少,发表文献最多的作者也仅发表了4篇论文而且只有一位。91%的作者都只发表了一篇论文。 结论:合作度为作者总数与论文总数之比,合作率为合著论文总数与论文总数之比。论文作者的合作度越高论文或期刊的质量也就会越高。关于模型检测技术在程序内存泄漏检测的应用的研究的合作度为398/155=2.57, 合作率为139/155=89.67%。该研究领域的整体合作程度较高。 • 4、文献计量分析结果——作者及作者共现分析 表4-1 发文3篇以上的作者 作者发文量分析图 作者共现分析图
结论:横坐标表示被引用次数,纵坐标代表的是对应被引用次数的文献篇数。需要说明的是,被引用次数分析使用的数据源是经过精筛后的53篇论文。图示可以看出大部分文献的被引用次数都在30以下。结论:横坐标表示被引用次数,纵坐标代表的是对应被引用次数的文献篇数。需要说明的是,被引用次数分析使用的数据源是经过精筛后的53篇论文。图示可以看出大部分文献的被引用次数都在30以下。 • 4、文献计量分析结果——引用分析 文献引用分析图
结论:颜色越深代表该词的频次越高。图示可以看出,model checking,model checker,verification,leak,memory等词为高频词汇。 • 4、文献计量分析结果——关键词分析 文献引用分析图
5、文献综述——基本概念 2、内存泄漏(Memory Leak)是指由于一些原因没有将程序运行过程中分配的内存块及时释放,从而导致那些内存块无法被再次利用,随着程序的运行,这样的内存积累,可用内存减少甚至会被耗尽,最终影响程序的正常运行。 内存泄漏检测:静态内存泄漏检测以及动态内存泄漏检测,这两种方法的根本区别在于检测时是否需要执行被检测程序。静态内存泄漏检测不用运行目标程序,而动态内存泄漏检测则需要运行被测程序。 1、模型检测(Model Checking):一种自动验证理论,主要解决如下问题:给定一个系统的模型,详尽及自动地检查该模型是否满足给定的规范,模型检测是自动验证有限状态系统的正确性性能的技术。
5、文献综述——模型检测技术在程序内存泄漏检测上的应用5、文献综述——模型检测技术在程序内存泄漏检测上的应用 基于模型检测的内存泄漏检测通常是将被测程序进行语法、词法分析,然后使用模型检测算法来判断分析后的结果。而各种方法用于分析的程序的形式不同,有些方法是直接分析被测程序的源代码,有些方法是分析被测程序的汇编语言形式的代码,但他们获得汇编代码的方式又可能不同,例如MLAB框架和X86EBMC工具,它们分析的汇编代码是由被测程序的可执行文件经过反汇编后获得的,而LLBMC工具则是通过编译被测程序的源代码来获得汇编代码的。各种内存泄漏检测方法使用的模型检测方法和工具也不尽相同。
5、文献综述——基于模型检测的内存泄漏检测方法5、文献综述——基于模型检测的内存泄漏检测方法 1.TMC方法 2.MLAB框架 3.基于SMT的有界模型检测方法
5、文献综述——基于模型检测的内存泄漏检测方法5、文献综述——基于模型检测的内存泄漏检测方法 1.TMC方法 TMC(Type and Model Checking)是一种结合了类型分析技术和模型检测技术的检测内存泄漏的静态分析方法,利用模型检测来对使用类型分析方法得出的结果进行更仔细的检查 TMC算法的形式: Foreach pll in pll_set do If(modelCheck(pll)=NotSafe) Leak_list.add(pll) Foreach leak in Leak_list Print_error_path(leak) 其中PLL代表被测源代码中可能造成内存泄漏的代码,pll_set由类型分析方法创建。 TMC工作流程图
5、文献综述——基于模型检测的内存泄漏检测方法5、文献综述——基于模型检测的内存泄漏检测方法 2.MLAB框架 MLAB (memory leak analysis for binaries)是用于检测二进制可执行文件中的内存泄漏漏洞的框架方案。MLAB的内存泄漏分析算法就是TMC算法。 MLAB工作流程图
5、文献综述——基于模型检测的内存泄漏检测方法5、文献综述——基于模型检测的内存泄漏检测方法 3.基于SMT的有界模型检测方法 这个方法包含了一个由LLVM(Low Level Virtual Machine)编译器框架以及其抽象中间汇编语言组成的前端,和一个应用了SMT(Satisfiability modulo theories)求解技术的有界模型检测器处理产生的决策问题的后端。 优点:不是直接在C源码上检测,而是检测一种由LLVM产生的类似RISC汇编语言的中介码。因此这个方法的分析结果就跟实际运行程序检测到的结果相近。 基于SMT的有界模型检测方法的框架结构
5、文献综述——基于模型检测的内存泄漏检测工具5、文献综述——基于模型检测的内存泄漏检测工具 1.F-soft工具 F-soft是一种模型检测工具,使用了针对软件的自定义的基于SAT(satisfiability)和基于BDD(Binary Decision Diagrams)的有界模型检测技术。 漏洞类型:内存泄漏漏洞、数组边界违规、空指针引用、除零等。 F-soft工作流程图
5、文献综述——基于模型检测的内存泄漏检测工具5、文献综述——基于模型检测的内存泄漏检测工具 2.X86EBMC工具 X86EBMC(X86 Executable Bounded ModelCheck)是一个使用了有界模型检测方法的针对可执行文件的模型检测工具,反汇编工具IDA Pro的插件 漏洞类型: 内存泄漏、缓存溢出 优点: 可扩展性和跨平台性的较强 X86EBMC工作流程图
5、文献综述——基于模型检测的内存泄漏检测工具5、文献综述——基于模型检测的内存泄漏检测工具 3.WBoxTool与Blast工具的结合使用 一种结合了静态分析、代码插装以及模型检测技术的内存泄漏故障的静态检测系统。 WBoxTool工具用于静态语义信息的提取。 Blast工具是模型检测模块使用的工具。 检测系统流程图
5、文献综述——基于模型检测的内存泄漏检测工具5、文献综述——基于模型检测的内存泄漏检测工具 4.CodeAuditor 一个包含了前端预处理模块和后端模型检测模块的内存泄漏检测原型工具。程序切片(program slicing)是指从程序中提取涉及漏洞的语句。程序系统状态的组合爆炸会给模型检测带来负担,因此对插入了断言的代码进行程序切片从而减小程序程序的状态数量,从而提高工具的性能。 后端采用Blast工具实现。 CodeAuditor的框架结构
5、文献综述——基于模型检测的内存泄漏检测工具5、文献综述——基于模型检测的内存泄漏检测工具 5. 其他工具
5、文献综述——其他内存泄漏检测工具(静态)5、文献综述——其他内存泄漏检测工具(静态) ITS4,RATS和Flawfinder: 都是发展较成熟的针对C\C++的源代码扫描工具。 漏洞类型:内存泄漏、缓冲区溢出等 优势:实现简单、算法效率高、代码覆盖率高 缺陷:误报率高、人工审计困难 lint及其系列工具 Lint是针对C程序的内存行为分析工具,目前有两个流行的Lint工具:PC-lint和Splint(原LClint)。 漏洞类型: 内存泄漏、缓冲区溢出、空指针解引用、变量初始化、内存错误释放 缺陷: ①需要手工对代码进行标记,然后进行内存分析,这对使用人员的要求较高,对于大规模的程序来说,额外增加了工作量; ②分析结果不够精确。 Clouseau: 用于检测 C/C++程序中安全性问题的工具。 漏洞类型:内存泄漏、对象被多次删除 PREfix和Metal: 都是全自动静态分析工具,用于帮助开发者寻找程序中的内存泄漏。 缺陷:只能发现那些发生在分配位置附近的内存泄漏,会错过很多在实 际程序中影响很大的内存泄漏。
5、文献综述——其他内存泄漏检测工具(动态)5、文献综述——其他内存泄漏检测工具(动态) ①监测内存为主,代表工具: Jprofiler,SWAT 这类工具能够以视图的方式从多个角度来展示程序在执行过程中的内存使用状况,专业的开发人员仔细观察就能够清晰地发现泄漏的内存块。 ②基于设定的堆增长率算法,代表工具:Cork、leakBot、Sleigh: 这类工具使用了基于设定的堆增长率算法,能够自动的判断是否产生了内存泄漏。由于它们使用的判断算法是一种经验算法,所以漏报率和错报率都比较高。 ③商业工具,代表工具:Insure++、BoundsChecker、Purify : 这类工具功能较全面。 漏洞类型:内存泄漏、内存分配错误、指针错误、算法错误、未申请的内存、未初始化的局部变量、使用己被释放的内存、内存丢失等 优势:定位泄漏代码位置从而减少调试时间、可视化实时内存状况、覆盖性分析,清楚地标明已被测试过的代码 缺陷:影响被测程序的性能、检测结果不全面
6、面临的挑战与总结——挑战 TMC和WBoxTool与Blast工具的结合使用其分析工具的功能还不够完善,它还不能有效的对大型软件系统进行属性检查。 MLAB框架还可以拓展到针对Java字节码的领域 挑战 CodeAuditor只能检测内存泄漏,开发者正试着将其应用到其他安全漏洞的检测上,比如说缓存溢出等。 LLBMC在支持C++上尚不完善,所以开发者们计划将来拓展其功能,使之能支持C++程序的检测。
6、面临的挑战与总结——总结 这篇论文借鉴系统化文献综述以及文献计量学的方法,分析了关于模型检测技术在内存泄漏检测中的应用方面的成果,首先对这方面研究的年限,期刊,作者,关键词等作出了分析,然后通过阅读文献分类总结了目前已有的内存泄漏检测的方法和工具,并概要分析了这些工具的优势和缺陷。在此基础上,重点综述分析了应用了模型检测技术的内存泄漏检测方法和工具的基础结构、应用的技术以及其优缺点等方面的信息。同时也指出了这个研究领域亟待解决的问题以及未来的研究趋势。因此,这篇论文可以为研究学者们下一步的研究题目提供综合性的参考,也能为工业界应用这个领域的技术提出一个决策的依据。
感谢各位评审老师及专家的宝贵意见! Thanks!