考虑指针别名的过程间分析技术研究

考虑指针别名的过程间分析技术研究

刘强[1]1998年在《考虑指针别名的过程间分析技术研究》文中研究说明指针分析是近年来国际上编译技术领域中的一个研究热点。C语言程序中指针的广泛使用严重地影响了数据流分析的精确程度,从而严重地影响了程序优化和程序变换的效果。近年来,新兴体系结构的设计更加依赖于编译技术的支持,指针对代码效率的影响也更加严重。指针分析从而成为现代编译技术中的一个重要组成部分。 与传统的分析方法相比,本文采用了一个新的过程间策略来处理指针问题。我们的过程间策略基于我们对C语言中名字空间的抽象—参数化名字空间。由于参数化名字空间中程序上下文的数目是有限的,因而我们以此为基础,发展了一个上下文敏感的过程间指针分析算法。该算法一方面是上下文敏感的,另一方面由于有效地利用了参数化空间内的启发式因素,因而是高效的。 基于参数化空间的抽象和指针分析的结果,我们开发了一个过程间分析的统一框架,该框架将基本的过程间问题(指针分析、调用图求解、过程间MOD分析和过程间到达-定值分析)有机地结合在一起,从而对C语言过程间分析问题的有效解决作了有意义的实践。 本文的工作结果已经应用到一个实际的SIMD芯片的优化/并行化编译器中。对该编译器的使用和测试证明了我们的过程间分析框架是实际可用的,这使本文的工作超出了纯粹的学术研究的范畴。

王留帅[2]2017年在《基于函数摘要的C++过程间静态分析研究》文中研究说明在现代软件工程中,代码安全成为人们不容忽视的问题,为了保证代码安全,一系列代码分析方法被提出。但过程间分析还存在很多不足,如今过程间分析大致分为两种,一种是通过函数内联的过程间分析,一种是基于函数摘要的过程间分析。传统的基于函数摘要的过程间分析为了实现上下文敏感特性需要消耗大量的内存,并且只能提取特定漏洞对应的函数信息。相较于传统的函数摘要方法,符号化函数摘要方法对每个函数只收集一份儿符号化的函数摘要,内存开销比较低,但是现有的符号化函数摘要方法不具有路径敏感的特点,并且也不具有良好的扩展性。本文基于传统的符号化函数摘要模型并结合符号执行方法提出了一种基于状态的路径敏感的符号化函数摘要算法。该算法使用符号化的程序状态作为函数的摘要信息,程序状态中存储该程序状态需要满足的路径条件,路径条件使用一组命题逻辑公式来表示函数中各个分支及其对应的路径条件信息。该算法分为函数摘要的创建,函数摘要的实例化以及函数摘要的应用三个部分。的创建过程就是对函数进行过程内分析的过程,在对某条路径分析结束时收集符号化的程序状态作为函数的摘要信息。在过程内分析过程中,将由于依赖于上下文环境信息而无法确定的报错信息进行记录,在应用函数摘要时进行延迟报错。对于函数摘要的实例化来说,就是在函数调用点使用上下文环境信息对函数摘要中符号化的信息进行实例化,根据实例化的路径条件选择有效的程序状态作为有效的函数摘要。对于函数摘要的应用来说,就是将有效的函数摘要对应的副作用应用到调用点对应的上下文环境中,并根据具体情况进行延迟报错。另外,本文提出了一种基于抽象语法树(Abstract Syntex Tree,AST)序列化存储的跨文件分析算法,该算法首先对编译单元进行编译,收集各编译单元的AST并进行序列化存储。在过程内分析的过程中,在遇到外部函数调用时,将被调用函数对应的AST进行逆序列化,然后创建被调用函数对应的控制流图(Control Flow Graph,CFG),从而完成后续的过程间分析。最后本文基于Clang静态分析平台,对基于状态的路径敏感的符号化函数摘要算法以及基于AST序列化存储到跨文件分析算法进行了实现,并进行了实验对比,实验表明基于状态的路径敏感的符号化函数摘要算法和基于AST序列化存储的跨文件分析算法具有一定的优越性。

陈杨[3]2003年在《基于SUIF2的过程间分析和优化》文中提出随着处理器技术的高速发展,编译优化的技术在现代处理器研究中表现出越来越重要的作用,因为合适的代码优化算法不仅可以产生高效率的目标代码,而且可以简化处理器的硬件控制机制。同时,新的语言特征和新的程序分析方法的出现,也使得编译器面临着新的挑战:需要适应新的语言特征,采用新的方法,提高代码的质量,同时也需要解决编译过程中出现的新问题。传统的过程内分析和优化是针对同一个过程内的对象,而过程间分析和优化处理将分析和优化的范围扩大到了整个程序。因为我们将考虑问题的范围扩大到了整个程序,所以能够获得的信息也就更多,但是处理的方法也更加的复杂。如何能够在各个过程之间找到相互关联的有用信息,并让编译器使用这些信息来改善代码的质量,需要用到完全不同于过程内优化的分析方法。本文首先对传统优化方式作了简单的介绍,并将传统的优化方式和过程间优化做了对比,接着介绍了过程间分析和优化技术所产生的冲击,给出我们研究的目的和方法。然后,我们对过程间分析和优化的一些经典的理论,包括调用图的构造,内联替换和过程克隆,过程间信息(副作用摘要集合,别名和过程间常量)作了介绍。接着,介绍了我们选择的研究平台SUIF2,因为它具有模块化的结构,能够给我们提供可扩展的程序表示,并且可以最大化提供代码的重用。利用SUIF2环境提供的模块和工具,我们实现了一个调用图的构造算法,并对算法做了验证。最后是本文的总结。过程间分析和优化的意义是很重大的,虽然过程间分析和优化的开销很大,但是它代表了一种编译器优化的方向和趋势。随着更成熟和更有效的过程间分析和优化方法的出现,将会有更多的编译器采用这个技术。

汤震浩, 李彬, 翟娟, 赵建华[4]2018年在《自动分析递归数据结构的归纳性质》文中研究说明提出了一种对递归数据结构的归纳性质进行自动化分析的框架.工作分为3个主要部分.首先,它将递归数据结构的归纳性质分为两个主要类别,并提出对应的处理模式,从而帮助简化对于程序中的递归数据结构上的相关性质的分析.其次,提出了一种称为分割与拼接的技术来发现和描述递归数据结构是如何被程序修改的:递归数据结构首先被分割为若干个互不相交的片段,然后,这些片段以新的方式重新拼接在一起,形成一个新的数据结构.这个技术的重点在于如何将程序原有的性质保留下来,从而为后面的分析过程所使用.最后,提出了一种调用上下文敏感的程序摘要过程间分析方法.案例分析和实验结果表明:分析框架可以有效地分析递归数据结构的归纳性质,并生成对程序证明过程有用的断言.

章磊[5]2009年在《Clang上的C/C++过程间分析和漏洞发掘》文中研究说明程序静态分析不编译运行程序,而是对程序源代码进行分析以发现其中的错误。静态分析的目标不是证明程序完全正确,而是在程序运行前尽可能多地发现其中隐含的错误,提高程序的可靠性和健壮性。现有的C/C++程序的过程内分析已经发展得较为完善,而大部分C/C++程序安全漏洞却存在于过程之间的交互作用中,仅仅使用过程内分析技术无法检测这些漏洞,需要深入研究过程间静态分析的理论和技术。在传统的过程间分析技术和经典过程间漏洞发掘技术的基础上,针对函数调用拓扑序列的生成和函数本地分析路径的生成等问题提出了符合Clang架构的实现算法。对于函数调用序列,采用递归向下的分析方法,保证每个函数即使被多次调用,函数体本身也只需分析一遍;对于本地分析路径,采用根据本地控制流图生成实际分析路径的方法,减少了路径分析的时间。基于LLVM编译架构以及Clang编译器设计并实现了一个过程间分析工具的原型SimpleIPA。SimpleIPA通过递归算法创建控制节点,然后对每个函数进行本地分析,对于某些特殊语句则使用特定的处理算法,在本地分析结束后,采用模型生成算法产生函数摘要。实例分析表明,SimpleIPA能够有效地发现过程间的安全漏洞。

杨俊[6]2011年在《基于函数摘要的二进制漏洞挖掘技术研究》文中提出由于软件以及网络的普及和迅猛发展,软件安全越来越受到人们的重视。传统的自动化程序分析工具,通过在源代码上分析寻找软件缺陷;而现实世界中的大多数软件无法得到源代码,因此直接针对二进制代码的自动化分析工具有很广泛的应用前景。然而,由于二进制代码缺乏必要的类型信息和函数逻辑信息,直接针对二进制代码的分析非常困难;尤其是静态分析工具,无论是国内外都没有可以用于分析现实世界软件的有效的工具。针对这一迫切且具有挑战性的需求,本论文提出了一种适用于二进制代码静态分析的方法。该方法基于函数摘要,通过过程内分析和过程间分析建立函数摘要,在函数摘要的基础上进行污点传播挖掘可疑的漏洞。首先将汇编代码转化成eREIL中间语言形式,然后建立函数摘要。在过程内分析的过程中,通过采用半模拟执行的方法来提高精度和效率。过程内分析首先通过过程内逆向切片将指令集分为两个集合,一个用于VSA算法,用于精确地跟踪内存地址;一个用于DDA算法,用于跟踪数据依赖关系。此外,通过与其他技术的整合,如符号执行、Fuzzing等,我们消除了各种技术的缺点,实现了优势互补。我们基于工业级工具Binnavi实现了上述算法的实用工具Loong Checker。在工具的实现过程中,我们通过一系列创新,如约束的整合、库函数模拟等来使得核心算法更为实用有效。利用Loong Checker我们验证三款常用软件Serenity player、FoxPlayer、KingSoft Office Writer (WPS)上的已知漏洞。此外在WPS上,我们还发现了三个未知的0day漏洞。在大型软件上挖掘漏洞的实验,不仅证明我们工具的有效性,也证明了工具的可用性。

段成全, 刘金刚[7]2011年在《基于程序分析的自动化漏洞挖掘工具的研究》文中研究说明研究和设计了一个基于程序分析的源代码漏洞分析与检测工具框架,框架中的各个模块如控制流分析(控制流图的构建、函数调用图的实现及过程内分析与过程间分析等)、数据流分析(求定义引用链、污染数据传播的设计、指针别名分析)、结构分析器、安全调度器、规则构建器,本文主要对代码分析的两个阶段进行了较为详细的介绍,同时对主要采取的过程内和过程间分析算法做了说明。

参考文献:

[1]. 考虑指针别名的过程间分析技术研究[D]. 刘强. 中国科学院研究生院(计算技术研究所). 1998

[2]. 基于函数摘要的C++过程间静态分析研究[D]. 王留帅. 电子科技大学. 2017

[3]. 基于SUIF2的过程间分析和优化[D]. 陈杨. 电子科技大学. 2003

[4]. 自动分析递归数据结构的归纳性质[J]. 汤震浩, 李彬, 翟娟, 赵建华. 软件学报. 2018

[5]. Clang上的C/C++过程间分析和漏洞发掘[D]. 章磊. 中国科学技术大学. 2009

[6]. 基于函数摘要的二进制漏洞挖掘技术研究[D]. 杨俊. 中国科学技术大学. 2011

[7]. 基于程序分析的自动化漏洞挖掘工具的研究[J]. 段成全, 刘金刚. 微计算机信息. 2011

标签:;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  

考虑指针别名的过程间分析技术研究
下载Doc文档

猜你喜欢