形状分析符号执行引擎中的状态合并

来源 :中国科学技术大学 | 被引量 : 0次 | 上传用户:sxx1203
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
C语言以其对底层机器操控的灵活性,在操作系统、嵌入式软件、底层驱动等要求高效的软件设计领域得到广泛应用。然而出于灵活性和效率的考虑,C语言赋予程序员对计算机完全掌控的能力同时,牺牲了一定的安全性:非法指针解引用、内存泄漏、缓冲区溢出等内存安全问题在C语言程序中尤其突出。  提高软件的可靠性一直是软件开发过程中所追求的目标之一。程序动态测试、程序静态分析和程序验证是目前确保软件安全质量的主要方法。程序验证作为保证程序正确性的最严格的手段,通过形式化方法对程序的各种性质给出严格的数学证明,从而保证了程序的可靠性;然而程序验证目前还未实现自动化证明,需要大量的人工证明,因此未能在工业界得到广泛的应用。程序动态测试的测试结果依赖于给定的测试集,面对复杂的软件系统测试集很难做到代码的高覆盖率,而且动态测试的成本和风险较高。程序静态分析在程序运行之前对代码进行分析,可以较早并且低成本地发现代码中可能存在的缺陷。  符号执行技术以其良好的精度控制和代码覆盖率,被广泛用于程序静态分析之中。对一个程序进行分析时,符号执行引擎以模拟真实的程序执行过程的方式,分析程序的数据流和控制流信息,并检查程序执行过程中可能出现的所有状态,得到程序的分析结果。高精度和高覆盖率要求对程序状态描述具体而完备,这会导致符号执行过程中常见的状态爆炸问题,使得符号执行技术的可伸缩性(Scalability)较差。笔者所在项目组基于符号执行技术实现了一个带形状分析功能的C程序分析工具,该工具同样存在路径爆炸、可伸缩性较差的问题,本文的主要工作是设计和实现状态合并功能及其优化,主要贡献有:  针对带形状分析的符号执行引擎,设计并实现了状态合并的算法,这其中主要的难点在于如何确保状态合并的引入不会造成程序分析结果精度的下降,尤其是在引入形状分析之后,在特定的状态抽象规则之上,如何判定状态是否可以合并,以及合并规则对分析精度的保证。  根据状态合并在符号执行引擎中的实际效果,考虑约束求解器的求解能力以及求解时间开销,引入了约束求解器求解代价驱动的优化,在LLVM中间代码上实现了精确的数据依赖分析,并根据求解代价的变化,驱动合并操作是否执行,以取得工具整体性能的最优。  参与ShapeChecker程序分析工具原型系统的实现,该程序分析工具能够自动发现C程序中常见的安全相关的错误,并且支持对单链表、双链表和二叉树等递归定义数据结构的分析。
其他文献
随着世界经济的快速发展,汽车保有量与日俱增,由驾驶员疲劳驾驶造成的交通事故也越来越多,为了保障行驶安全和预防交通事故的发生,研究一种能有效检测驾驶员疲劳并及时给出报
日趋深入的应用对图像处理技术提出了更高的要求,使得图像处理的研究更加深入、广泛。作为图像处理的一个重要环节,图像增强在整个图像处理过程中有着承上启下的作用。由于图
经济全球化之后,企业越来越关注业务流程管理,而Petri网作为一种数学化的建模工具,也越来越多被应用到业务流程管理的定量分析中。Petri网的发展同时得益于各种扩展Petri网的
电网线损是一个综合性的经济、技术指标,它所反映的不仅是电网结构和运行方面的合理性,而且可以反映电力企业的技术和管理水平。便捷、有效的线损计算和分析方法将有利于发现
随着互联网络在人们的工作和生活中扮演的角色越来越重要,互联网络中存在的网络攻击和软件漏洞对系统及网络安全的威胁也日益突起,引起了人们更多的注意。为此,可信计算组织
在并行时代,系统正确性验证越来越受到关注。在并行系统中,由于线程之间执行次序的不确定性,错误往往很难通过测试的方法重现,从而研究人员提出模型检测技术验证并行程序。模
笔式协同交互,是人机交互技术(Human-Computer Interaction,简写HCI)的一类形式,是把笔作为媒介来进行交互和沟通,通过采用专门的数字笔在特定的输入设备上书写笔迹来达到协
计算机应用正朝着数据密集型发展。同时,随着物联网的兴起,越来越多的物品被接入到互联网,产生了新的海量数据并通过云端进行上传和下载。而近年来,用户生成的内容也增长了15
随着物联网及新型定位技术的发展,室内定位成为可能,室内位置服务与移动对象数据管理也成为了近年来的研究热点。以往面向室外空间的移动对象数据管理在数据集、算法、系统等
作为信息管理的进一步发展,知识管理对于提升企业竞争力具有重要意义。企业中存在的非结构化信息是重要的知识源,具有数据量大、增长速度快等特点。如何获取、管理并应用海量