基于二进制指令插桩的C++程序缺陷检测技术的研究与实现
摘要 | 第4-5页 |
ABSTRACT | 第5-6页 |
第一章. 引言 | 第9-14页 |
1.1 研究背景及意义 | 第9-11页 |
1.1.1 研究背景 | 第9页 |
1.1.2 国内外研究现状 | 第9-10页 |
1.1.3 研究意义 | 第10-11页 |
1.2 研究内容及目标 | 第11-12页 |
1.3 论文结构 | 第12-14页 |
第二章. 动态二进制插桩技术介绍 | 第14-28页 |
2.1 C++程序缺陷的分类 | 第14-16页 |
2.1.1 动态内存管理缺陷 | 第14-15页 |
2.1.2 非法地址引用 | 第15-16页 |
2.1.3 缓冲区溢出 | 第16页 |
2.2 常见的软件分析方法 | 第16-17页 |
2.2.1 静态分析 | 第16页 |
2.2.2 动态测试 | 第16-17页 |
2.3 程序插桩技术 | 第17-19页 |
2.3.1 源代码插桩 | 第17-18页 |
2.3.2 静态二进制插桩 | 第18页 |
2.3.3 动态二进制插桩 | 第18-19页 |
2.4 动态二进制插桩框架 | 第19-27页 |
2.4.1 Pin | 第19-23页 |
2.4.2 Valgrind | 第23-24页 |
2.4.3 DynamoRIO | 第24-27页 |
2.5 小结 | 第27-28页 |
第三章. C++程序缺陷检测方法设计 | 第28-46页 |
3.1 影子内存设计 | 第28-33页 |
3.1.1 寄存器的映射 | 第29-30页 |
3.1.2 虚拟内存空间映射 | 第30-33页 |
3.2 C++内存管理缺陷检测方法 | 第33-45页 |
3.2.1 检测原理概述 | 第34-35页 |
3.2.2 动态内存管理错误检测 | 第35-41页 |
3.2.3 非法地址引用缺陷检测 | 第41-43页 |
3.2.4 缓冲区溢出检测 | 第43-45页 |
3.3 小结 | 第45-46页 |
第四章. C++程序缺陷检测系统的实现 | 第46-56页 |
4.1 实现环境介绍 | 第46-47页 |
4.2 影子内存模块 | 第47-50页 |
4.2.1 寄存器影子内存实现 | 第47-48页 |
4.2.2 栈影子内存实现 | 第48页 |
4.2.3 堆影子内存实现 | 第48-50页 |
4.2.4 影子内存的操作接口 | 第50页 |
4.3 调用信息跟踪模块 | 第50-54页 |
4.4 插桩模块 | 第54-55页 |
4.5 错误报告模块 | 第55页 |
4.6 小结 | 第55-56页 |
第五章. 实验与分析 | 第56-62页 |
5.1 运行时开销测试 | 第56-57页 |
5.1.1 运行时开销的计算 | 第56-57页 |
5.2 运行开销实验结果分析 | 第57页 |
5.3 检测准确率验证 | 第57-60页 |
5.4 准确率验证结果分析 | 第60页 |
5.5 小结 | 第60-62页 |
第六章. 总结与展望 | 第62-65页 |
6.1 工作总结 | 第62-63页 |
6.2 课题展望 | 第63-65页 |
参考文献 | 第65-67页 |
致谢 | 第67-68页 |
攻读学位期间发表的学术论文 | 第68页 |