基于符号执行的代码静态检测方法研究与实现
摘要 | 第5-6页 |
ABSTRACT | 第6页 |
第一章 绪论 | 第11-18页 |
1.1 研究背景和意义 | 第11-12页 |
1.2 动态测试 | 第12-13页 |
1.3 静态分析 | 第13-16页 |
1.4 本文主要工作 | 第16页 |
1.5 论文的组织结构 | 第16-18页 |
第二章 符号执行概述 | 第18-27页 |
2.1 符号执行基本原理 | 第18-21页 |
2.2 动态符号执行 | 第21-23页 |
2.3 关键挑战和解决方案 | 第23-25页 |
2.3.1 路径爆炸 | 第23-24页 |
2.3.2 约束求解 | 第24-25页 |
2.3.3 内存模型 | 第25页 |
2.4 本章小结 | 第25-27页 |
第三章 LLVM中间语言 | 第27-33页 |
3.1 LLVM项目 | 第27-28页 |
3.2 LLVM IR | 第28-30页 |
3.2.1 标示符 | 第28-29页 |
3.2.2 类型系统 | 第29-30页 |
3.2.3 核心指令集 | 第30页 |
3.3 静态单赋值指令SSA | 第30-31页 |
3.4 LLVM IR程序实例 | 第31-32页 |
3.5 本章小结 | 第32-33页 |
第四章 内存模型 | 第33-47页 |
4.1 内存模型所面临的挑战 | 第33-34页 |
4.2 三种内存模型 | 第34-37页 |
4.2.1 名字绑定模型 | 第34页 |
4.2.2 数组模型 | 第34-36页 |
4.2.3 基于区域的三元组模型 | 第36-37页 |
4.3 TMM内存模型 | 第37-45页 |
4.3.1 核心思想 | 第37-38页 |
4.3.2 概念定义 | 第38-39页 |
4.3.3 内存模型 | 第39-42页 |
4.3.4 内存模型示例 | 第42-45页 |
4.4 本章小结 | 第45-47页 |
第五章 系统实现 | 第47-68页 |
5.1 系统架构 | 第47-48页 |
5.2 关键数据结构 | 第48-54页 |
5.2.1 符号值对象 | 第48-51页 |
5.2.2 块状态对象 | 第51-52页 |
5.2.3 路径对象 | 第52-53页 |
5.2.4 字符串管理器 | 第53页 |
5.2.5 代码对象 | 第53-54页 |
5.3 指令语义建模 | 第54-60页 |
5.4 约束求解器Z3 | 第60-64页 |
5.4.1 Z3性能 | 第60页 |
5.4.2 Z3架构 | 第60-61页 |
5.4.3 Z3位向量 | 第61-63页 |
5.4.4 Z3接 | 第63-64页 |
5.5 关键算法 | 第64-66页 |
5.6 本章小结 | 第66-68页 |
第六章 实验部分 | 第68-77页 |
6.1 实验方法 | 第68-69页 |
6.2 错误定义 | 第69-70页 |
6.3 实验数据 | 第70-73页 |
6.4 实验环境 | 第73-74页 |
6.5 实验结果 | 第74-75页 |
6.6 实验分析 | 第75-76页 |
6.7 本章小结 | 第76-77页 |
第七章 结论 | 第77-79页 |
7.1 本文主要成果 | 第77页 |
7.2 本文的创新点 | 第77-78页 |
7.3 本文的不足 | 第78页 |
7.4 将来的工作 | 第78-79页 |
致谢 | 第79-80页 |
参考文献 | 第80-84页 |
攻硕期间取得的研究成果 | 第84-85页 |