26
在在在在在在在在 在在在在在在在在在在在在在在在在在在在 在在在 在在在 在在在在 在在 在在1043111331

在此输入文字标题

Embed Size (px)

DESCRIPTION

在此输入文字标题. 模型检测技术在程序内存泄漏检测中的应用. 1. 答辩人:陈宇星 指导老师:洪玫 学号:1043111331. 1 、 研究背景和研究意义 2 、 主要工作 3 、 系统化文献综述和文献计量分析方法 4 、 文献计量分析结果 5 、 文献综述 6、 面临的挑战与总结 。. 目 录. 研究背景和研究意义. 研究背景: - PowerPoint PPT Presentation

Citation preview

Page 1: 在此输入文字标题

在此输入文字标题模型检测技术在程序内存泄漏检测中的应用

答辩人:陈宇星指导老师:洪玫学号: 1043111331

Page 2: 在此输入文字标题

1 、研究背景和研究意义

2 、主要工作

3 、系统化文献综述和文献计量分析方法

4 、文献计量分析结果

5 、文献综述

6 、面临的挑战与总结

Page 3: 在此输入文字标题

研究背景和研究意义

研究背景: 软件开发常用的动态内存管理技术,使得程序的设计更自由更灵活,但是,它也很容易造成内存

管理漏洞,特别是内存泄漏问题。内存泄漏的堆积会导致程序运行异常甚至崩溃,并且在调试过程中是很难定位和解决的,因此内存泄漏检测是一个长期热门的研究课题。而模型检测技术是基于对程序所有可能执行路径的尽可能的仿真,从而检测出程序中潜在的漏洞,所以可以将模型检测技术用于程序内存泄漏检测中。

研究意义: 国内外学者们针对内存泄漏检测这一课题作出了大量的研究,因此这篇论文主要关注于模型检测

“技术在程序内存泄漏检测上的应用,通过整理学者们历年来在这方面的研究成果,来给出 现已有” “的应用了模型检测技术的内存泄漏检测方法和工具有哪些? 、 其他流行的内存泄漏检测方法和

”工具 等问题的回答。 这篇论文明确了学者们正在研究关于这个领域的什么问题、有何研究成果以及尚未解决的问

题。因此,可以为研究学者们下一步的研究课题提供综合性的参考,也能为工业界应用这个领域的技术提出一个决策的依据。

Page 4: 在此输入文字标题

主要工作

1. 明确研究问题,制定综述方案

2. 检索相关文献

3. 文献筛选

4. 提取并分析数据(文献计量分析)

5. 阅读文献,整理归纳,完成综述

Page 5: 在此输入文字标题

系统化文献综述( systematic literature review)是一种针对某一研究问题开展的基于文献的系统化综述方法。一开始主要用于医学领域以及社会学研究领域,在 2004年被引入了软件工程领域,主要包含了制定综述方案、展开文献综述、完成综述报告等三个阶段。数据来源搜索引擎: Google Scholar 数据库: IEEE Digital Library,Web of Science, CNKI筛选原则 1. 消重 2. 阅读题目和摘要 3. 精筛 采用 EndNote来管理论文库,经过消重后,论文库中共 155篇文献,经过精筛后,还剩 53篇论文。

文献计量学( Bibliometrics)方法是利用数理统计学方法来定量的描述、评价以及预测学术现状及其发展趋势的图书情报学。分析工具:BibExcel、 Pajek、 VOSViewer

系统文献综述

文献计量分析

Page 6: 在此输入文字标题

4 、文献计量分析结果 ——年限分析

结论:论文发表情况总体呈增长趋势,尤其是在2007--2009年是关于这个主题的发表的论文是最多的时期,而 2014年由于正处于年初,因此发表论文篇数暂时只有一篇,造成了下降的趋势。

年限分析图

Page 7: 在此输入文字标题

4 、文献计量分析结果 ——文献类型及期刊来源分析

结论:文献类型主要是期刊文章和会议论文

文献类型分析图文献来源期刊分析图

结论: (图示省略了仅发表了一篇论文的期刊),从图中可以看出 IEEE这个组织对这个研究主题很感兴趣,《 IEEE Transaction》、《 IEEE Journal》等期刊发表了多篇这方面的论文。绝大部分期刊只发表了 1篇相关研究的论文。

Page 8: 在此输入文字标题

4 、文献计量分析结果 ——作者及作者共现分析

结论:用于分析的155篇论文共有398位作者。这个研究领域的高产作者较少,发表文献最多的作者也仅发表了 4篇论文而且只有一位。 91%的作者都只发表了一篇论文。

作者发文量分析图

表 4-1 发文 3篇以上的作者

作者 发文量Engler, Dawson 4

Zadok, E. 3

Srirama, Satish Narayana 3

Smolka, S. A. 3

Musuvathi, Madanlal 3

Grosu, R. 3

Callanan, S. 3

结论:合作度为作者总数与论文总数之比,合作率为合著论文总数与论文总数之比。论文作者的合作度越高论文或期刊的质量也就会越高。关于模型检测技术在程序内存泄漏检测的应用的研究的合作度为398/155=2.57,合作率为139/155=89.67%。该研究领域的整体合作程度较高。

作者共现分析图

Page 9: 在此输入文字标题

4 、文献计量分析结果 ——引用分析

结论:横坐标表示被引用次数,纵坐标代表的是对应被引用次数的文献篇数。需要说明的是,被引用次数分析使用的数据源是经过精筛后的 53篇论文。图示可以看出大部分文献的被引用次数都在30以下。

文献引用分析图

Page 10: 在此输入文字标题

4 、文献计量分析结果 ——关键词分析

结论:颜色越深代表该词的频次越高。图示可以看出,model checking,model checker, verification, leak,memory等词为高频词汇。

文献引用分析图

Page 11: 在此输入文字标题

2 、内存泄漏( Memory Leak)是指由于一些原因没有将程序运行过程中分配的内存块及时释放,从而导致那些内存块无法被再次利用,随着程序的运行,这样的内存积累,可用内存减少甚至会被耗尽,最终影响程序的正常运行。内存泄漏检测:静态内存泄漏检测以及动态内存泄漏检测,这两种方法的根本区别在于检测时是否需要执行被检测程序。静态内存泄漏检测不用运行目标程序,而动态内存泄漏检测则需要运行被测程序。

1 、模型检测( Model Checking ):一种自动验证理论,主要解决如下问题:给定一个系统的模型,详尽及自动地检查该模型是否满足给定的规范,模型检测是自动验证有限状态系统的正确性性能的技术。

5 、文献综述 ——基本概念

Page 12: 在此输入文字标题

基于模型检测的内存泄漏检测通常是将被测程序进行语法、词法分析,然后使用模型检测算法来判断分析后的结果。而各种方法用于分析的程序的形式不同,有些方法是直接分析被测程序的源代码,有些方法是分析被测程序的汇编语言形式的代码,但他们获得汇编代码的方式又可能不同,例如MLAB框架和 X86EBMC工具,它们分析的汇编代码是由被测程序的可执行文件经过反汇编后获得的,而 LLBMC工具则是通过编译被测程序的源代码来获得汇编代码的。各种内存泄漏检测方法使用的模型检测方法和工具也不尽相同。

5 、文献综述 ——模型检测技术在程序内存泄漏检测上的应用

Page 13: 在此输入文字标题

5 、文献综述 ——基于模型检测的内存泄漏检测方法

1.TMC 方法

2.MLAB 框架

3.基于 SMT的有界模型检测方法

Page 14: 在此输入文字标题

5 、文献综述 ——基于模型检测的内存泄漏检测方法

TMC( Type and Model Checking)是一种结合了类型分析技术和模型检测技术的检测内存泄漏的静态分析方法,利用模型检测来对使用类型分析方法得出的结果进行更仔细的检查

C源程序 语法分析 程序分析 模型检测

别名分析

谓词分析

检测结果

TMC 工作流程图

1.TMC 方法

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 由类型分析方法创建。

Page 15: 在此输入文字标题

5 、文献综述 ——基于模型检测的内存泄漏检测方法

MLAB (memory leak analysis for binaries)是用于检测二进制可执行文件中的内存泄漏漏洞的框架方案。 MLAB的内存泄漏分析算法就是 TMC算法。

MLAB 工作流程图

2.MLAB 框架

Page 16: 在此输入文字标题

5 、文献综述 ——基于模型检测的内存泄漏检测方法

这个方法包含了一个由LLVM( Low Level Virtual Machine)编译器框架以及其抽象中间汇编语言组成的前端,和一个应用了SMT( Satisfiability modulo theories)求解技术的有界模型检测器处理产生的决策问题的后端。

基于 SMT 的有界模型检测方法的框架结构

3.基于 SMT的有界模型检测方法

优点:不是直接在 C源码上检测,而是检测一种由 LLVM产生的类似 RISC汇编语言的中介码。因此这个方法的分析结果就跟实际运行程序检测到的结果相近。

Page 17: 在此输入文字标题

5 、文献综述 ——基于模型检测的内存泄漏检测工具

F-soft是一种模型检测工具,使用了针对软件的自定义的基于SAT( satisfiability)和基于 BDD( Binary Decision Diagrams)的有界模型检测技术。 漏洞类型:内存泄漏漏洞、数组边界违规、空指针引用、除零等。

F-soft 工作流程图

1.F-soft 工具

Page 18: 在此输入文字标题

5 、文献综述 ——基于模型检测的内存泄漏检测工具

X86EBMC(X86 Executable Bounded Model Check)是一个使用了有界模型检测方法的针对可执行文件的模型检测工具,反汇编工具 IDA Pro的插件漏洞类型:内存泄漏、缓存溢出优点:可扩展性和跨平台性的较强

X86EBMC 工作流程图

2.X86EBMC 工具

Page 19: 在此输入文字标题

5 、文献综述 ——基于模型检测的内存泄漏检测工具

一种结合了静态分析、代码插装以及模型检测技术的内存泄漏故障的静态检测系统。 WBoxTool工具用于静态语义信息的提取。 Blast 工具是模型检测模块使用的工具。 检测系统流程图

3.WBoxTool与 Blast工具的结合使用

Page 20: 在此输入文字标题

5 、文献综述 ——基于模型检测的内存泄漏检测工具

一个包含了前端预处理模块和后端模型检测模块的内存泄漏检测原型工具。程序切片( program slicing)是指从程序中提取涉及漏洞的语句。程序系统状态的组合爆炸会给模型检测带来负担,因此对插入了断言的代码进行程序切片从而减小程序程序的状态数量,从而提高工具的性能。

后端采用 Blast工具实现。 CodeAuditor 的框架结构

4.CodeAuditor

Page 21: 在此输入文字标题

5 、文献综述 ——基于模型检测的内存泄漏检测工具

工具 年份 技术 检测程序 漏洞类型 备注LLBMC 2013 SMT、 BMC、静态分析 C 程序 非法内存方法、堆栈

溢出、内存泄漏、非法释放等

用 到 了 编 译 器LLVM 、 SMT 求解器 STP

Goanna 2012 静态分析、模型检测 C/C++ 程序 内存泄漏、重复释放、空指针错误、字符串溢出等

应用了模型检测器NuSMV

FixD 2007 模型检测、记日志( logging )、检查点回滚、推测( Speculation )

分布式系统 内存泄漏、非法访问内存等

用到了 ModelD 、LibLog 等工具

CMC 2006 模型检测 C\C++ 指针访问违规、程序断言失败、内存泄漏

可以保存状态以避免重复的状态探索

CBMC 2004 形式化验证、 SAT、 BMC ANSI-C 内存泄漏、指针安全、数组越界

验证过程是高度自动的,用户仅需要输入 BMC 的边界

5. 其他工具

Page 22: 在此输入文字标题

5 、文献综述 ——其他内存泄漏检测工具(静态)

lint及其系列工具Lint是针对 C 程序的内存行为分析工具,目前有两个流行的 Lint工具:PC-lint和 Splint(原 LClint)。

漏洞类型:内存泄漏、缓冲区溢出、空指针解引用、变量初始化、内存错误释放

缺陷:①需要手工对代码进行标记,然后进行内存分析,这对使用人员的要求较高,对于大规模的程序来说,额外增加了工作量;②分析结果不够精确。

Clouseau: 用于检测 C/C++程序中安全性问题的工具。 漏洞类型:内存泄漏、对象被多次删除

PREfix和 Metal: 都是全自动静态分析工具,用于帮助开发者寻找程序中的内存泄漏。 缺陷:只能发现那些发生在分配位置附近的内存泄漏,会错过很多在实 际程序中影响很大的内存泄漏。

ITS4,RATS和 Flawfinder: 都是发展较成熟的针对 C\C++ 的源代码扫描工具。

漏洞类型:内存泄漏、缓冲区溢出等

优势:实现简单、算法效率高、代码覆盖率高

缺陷:误报率高、人工审计困难

Page 23: 在此输入文字标题

5 、文献综述 ——其他内存泄漏检测工具(动态)

① 监测内存为主,代表工具: Jprofiler, SWAT

这类工具能够以视图的方式从多个角度来展示程序在执行过程中的内存使用状况,专业的开发人员仔细观察就能够清晰地发现泄漏的内存块。

②基于设定的堆增长率算法,代表工具:Cork、 leakBot、 Sleigh:

这类工具使用了基于设定的堆增长率算法,能够自动的判断是否产生了内存泄漏。由于它们使用的判断算法是一种经验算法,所以漏报率和错报率都比较高。

③商业工具,代表工具: Insure++ 、 BoundsChecker、 Purify :

这类工具功能较全面。 漏洞类型:内存泄漏、内存分配错误、指针错误、算法错误、未申请的内存、未初始化的局部变量、使用己被释放的内存、内存丢失等

优势:定位泄漏代码位置从而减少调试时间、可视化实时内存状况、覆盖性分析,清楚地标明已被测试过的代码

缺陷:影响被测程序的性能、检测结果不全面

Page 24: 在此输入文字标题

TMC和WBoxTool与 Blast 工具的结合使用其分析工具的功能还不够完善,它还不能有效的对大型软件系统进行

属性检查。MLAB 框架还可以拓展到针对 Java 字

节码的领域

CodeAuditor 只能检测内存泄漏,开发者正试着将其应用到其他安全漏洞

的检测上,比如说缓存溢出等。LLBMC 在支持 C++ 上尚不完善,所以开发者们计划将来拓展其功能,使之

能支持 C++ 程序的检测。

挑战

6 、面临的挑战与总结——挑战

Page 25: 在此输入文字标题

6 、面临的挑战与总结——总结

这篇论文借鉴系统化文献综述以及文献计量学的方法,分析了关于模型检测技术在内存泄漏检测中的应用方面的成果,首先对这方面研究的年限,期刊,作者,关键词等作出了分析,然后通过阅读文献分类总结了目前已有的内存泄漏检测的方法和工具,并概要分析了这些工具的优势和缺陷。在此基础上,重点综述分析了应用了模型检测技术的内存泄漏检测方法和工具的基础结构、应用的技术以及其优缺点等方面的信息。同时也指出了这个研究领域亟待解决的问题以及未来的研究趋势。因此,这篇论文可以为研究学者们下一步的研究题目提供综合性的参考,也能为工业界应用这个领域的技术提出一个决策的依据。

Page 26: 在此输入文字标题

Thanks!感谢各位评审老师及专家的宝贵意见!