首页> 中文学位 >基于函数摘要的C++过程间静态分析研究
【6h】

基于函数摘要的C++过程间静态分析研究

代理获取

目录

声明

第一章 绪论

1.1 研究背景

1.2 研究内容

1.3 论文结构和主要内容

第二章 过程间静态分析

2.1 数据流分析

2.2 符号执行

2.3 过程间分析研究现状

2.4 跨文件分析

2.5 C++过程间分析面临的问题

2.6 小结

第三章 基于状态的路径敏感的符号化函数摘要

3.1 函数摘要的定义

3.2 基于状态的路径敏感的符号化函数摘要实现算法

3.3 内存模型

3.4 总结

3.5 附录:符号化表达式

第四章 基于AST序列化存储的跨文件分析算法

4.1 跨文件分析

4.2 基于AST序列化存储的跨文件分析实现

4.3 总结

第五章 基于状态的路径敏感的符号化函数摘要实现

5.1 Clang静态分析框架

5.2 函数摘要创建

5.3 函数摘要实例化

5.4 AST序列化与逆序列化

5.5 Checker实现

5.6 总结

第六章 实验分析

6.1 Clang基于函数摘要与基于函数内联实验对比

6.2 Clang基于函数摘要的跨文件分析实验对比

6.3 路径敏感的符号化函数摘要与路径不敏感的符号化函数摘要对比

6.4 总结

第七章 总结与展望

7.1 全文总结

7.2 进一步的研究工作

致谢

参考文献

展开▼

摘要

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

著录项

相似文献

  • 中文文献
  • 外文文献
  • 专利
代理获取

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号