基于LLVM中间表示的缺陷静态分析工具实现
摘要 | 第4-5页 |
ABSTRACT | 第5-6页 |
第一章 引言 | 第9-13页 |
1.1 背景知识 | 第9-11页 |
1.1.1 软件测试 | 第9-10页 |
1.1.2 程序分析 | 第10页 |
1.1.3 软件形式化证明 | 第10-11页 |
1.2 相关工作 | 第11-12页 |
1.3 本文主要工作和贡献 | 第12页 |
1.4 论文结构 | 第12-13页 |
第二章 程序静态分析关键技术和论文平台介绍 | 第13-23页 |
2.1 静态分析关键技术 | 第13-18页 |
2.1.1 控制流分析 | 第13-14页 |
2.1.2 数据流分析 | 第14-15页 |
2.1.3 污点分析 | 第15-16页 |
2.1.4 符号执行 | 第16-18页 |
2.1.5 模型检测 | 第18页 |
2.1.6 定理证明 | 第18页 |
2.2 LLVM编译器介绍 | 第18-21页 |
2.2.1 LLVM编译器架构 | 第18-19页 |
2.2.2 LLVM IR中间表示 | 第19-21页 |
2.3 Z3求解器 | 第21页 |
2.4 程序缺陷介绍 | 第21-22页 |
2.5 本章小结 | 第22-23页 |
第三章 MLSA系统设计 | 第23-32页 |
3.1 MLSA框架 | 第23-25页 |
3.2 LLVM IR信息提取 | 第25-27页 |
3.2.1 全局变量的处理 | 第26页 |
3.2.2 函数调用关系的存储 | 第26页 |
3.2.3 基本块跳转关系的处理 | 第26-27页 |
3.3 LLVM IR指令的处理 | 第27-30页 |
3.3.1 符号处理 | 第27-29页 |
3.3.2 过程内分析 | 第29页 |
3.3.3 过程间分析 | 第29-30页 |
3.4 缺陷检测 | 第30-31页 |
3.4.1 将符号信息转化为Z3 SMT输入格式 | 第30页 |
3.4.2 缺陷检测和定位至源代码 | 第30-31页 |
3.5 本章小结 | 第31-32页 |
第四章 MLSA系统实现 | 第32-40页 |
4.1 LLVM Pass | 第32-33页 |
4.2 函数调用图和基本块跳转图实现 | 第33-34页 |
4.3 符号执行实现和SMT求解实现 | 第34-39页 |
4.4 系统概况 | 第39页 |
4.5 本章小结 | 第39-40页 |
第五章 实验和评估 | 第40-51页 |
5.1 实验准备 | 第40页 |
5.1.1 实验平台 | 第40页 |
5.1.2 前期处理 | 第40页 |
5.2 程序缺陷检测实验 | 第40-50页 |
5.2.1 除零检测 | 第41-42页 |
5.2.2 指针越界访问 | 第42-43页 |
5.2.3 死代码检测 | 第43-44页 |
5.2.4 对于Fortran语言的初步检测 | 第44-45页 |
5.2.5 对GUN Coreutils的检测 | 第45-48页 |
5.2.6 实验对比 | 第48-50页 |
5.3 实验结论 | 第50页 |
5.4 本章小结 | 第50-51页 |
第六章 总结与展望 | 第51-52页 |
6.1 总结 | 第51页 |
6.2 未来工作与展望 | 第51-52页 |
引用文献 | 第52-54页 |
致谢 | 第54-55页 |
攻读学位期间发表的学术论文 | 第55页 |