摘要 | 第5-6页 |
ABSTRACT | 第6-7页 |
第一章 绪论 | 第11-19页 |
1.1 课题研究背景与意义 | 第11-12页 |
1.2 相关工作 | 第12-16页 |
1.2.1 C++应用程序缺陷类型 | 第12-13页 |
1.2.2 C++应用程序缺陷检测方法 | 第13-15页 |
1.2.3 应用程序插桩技术 | 第15-16页 |
1.3 研究内容 | 第16-17页 |
1.4 论文结构 | 第17-19页 |
第二章 动态二进制插桩平台 | 第19-31页 |
2.1 主流二进制插桩平台 | 第19-27页 |
2.1.1 Valgrind | 第19-21页 |
2.1.2 Dyninst | 第21-22页 |
2.1.3 DynamoRIO | 第22-24页 |
2.1.4 Pin | 第24-27页 |
2.2 主流二进制插桩平台比较 | 第27页 |
2.3 Pin插桩工具及其应用 | 第27-30页 |
2.3.1 编写主函数 | 第27-29页 |
2.3.2 编写回调函数 | 第29-30页 |
2.4 本章小结 | 第30-31页 |
第三章 针对C++应用程序缺陷检测的关键技术 | 第31-43页 |
3.1 针对C++应用程序内存空间的影子内存设计 | 第31-37页 |
3.1.1 传统影子内存设计方案 | 第31-32页 |
3.1.2 基于组合映射的高效影子内存设计方案 | 第32-36页 |
3.1.3 影子内存设计方案比较 | 第36-37页 |
3.2 动态插桩检测技术 | 第37-39页 |
3.2.1 动态插桩检测原理 | 第37页 |
3.2.2 针对C++应用程序缺陷检测的插桩方案设计 | 第37-39页 |
3.3 针对内存管理缺陷检测的内存申请/释放操作跟踪技术 | 第39-40页 |
3.3.1 内存申请操作跟踪技术 | 第39-40页 |
3.3.2 内存释放操作跟踪技术 | 第40页 |
3.4 本章小结 | 第40-43页 |
第四章 针对内存管理缺陷和缓冲区溢出缺陷的检测方案设计 | 第43-57页 |
4.1 内存管理缺陷检测方案设计 | 第43-49页 |
4.1.1 内存管理缺陷 | 第43-45页 |
4.1.2 基于内存块可达性分析的内存泄漏检测方案设计 | 第45-48页 |
4.1.3 内存错误释放检测方案设计 | 第48-49页 |
4.2 缓冲区溢出缺陷检测方案设计 | 第49-55页 |
4.2.1 缓冲区溢出缺陷 | 第50-52页 |
4.2.2 基于地址可访问判定的堆缓冲区溢出检测方案设计 | 第52页 |
4.2.3 基于局部变量边界映射的栈缓冲区溢出检测方案设计 | 第52-53页 |
4.2.4 危险库函数使用不当缓冲区溢出检测方案设计 | 第53-55页 |
4.3 本章小结 | 第55-57页 |
第五章 C++应用程序缺陷检测工具的实现与实验分析 | 第57-73页 |
5.1 工具整体架构 | 第57-58页 |
5.2 工具模块设计与实现 | 第58-64页 |
5.2.1 插桩分析模块 | 第58-59页 |
5.2.2 函数调用跟踪模块 | 第59页 |
5.2.3 影子内存管理模块 | 第59-63页 |
5.2.4 缺陷报告输出模块 | 第63-64页 |
5.3 实验分析 | 第64-71页 |
5.3.1 工具部署运行 | 第64-68页 |
5.3.2 运行开销测试 | 第68-70页 |
5.3.3 检测准确性测试 | 第70-71页 |
5.4 本章小结 | 第71-73页 |
第六章 总结与展望 | 第73-77页 |
6.1 课题总结 | 第73-74页 |
6.2 课题展望 | 第74-77页 |
参考文献 | 第77-81页 |
附录 | 第81-89页 |
致谢 | 第89-91页 |
攻读硕士期间发表的学术论文目录 | 第91页 |