| 摘要 | 第1-4页 |
| Abstract | 第4-7页 |
| 第一章 绪论 | 第7-11页 |
| ·研究背景 | 第7-8页 |
| ·C/C++程序安全检查工具概述 | 第8-9页 |
| ·本文工作及内容组织 | 第9-11页 |
| 第二章 C/C++预处理 | 第11-15页 |
| ·C/C++预处理器及预处理指令 | 第11-12页 |
| ·C/C++程序安全检查工具预处理器 | 第12页 |
| ·预处理中的安全漏洞 | 第12-15页 |
| 第三章 ANTLR与C/C++程序安全检查工具预处理器 | 第15-23页 |
| ·分析器自动生成工具ANTLR | 第15-20页 |
| ·语法分析器 | 第15-17页 |
| ·分析器自动生成工具ANTLR的特点 | 第17-20页 |
| ·使用ANTLR设计预处理器 | 第20-23页 |
| ·C/C++程序安全检查工具预处理器 | 第20-21页 |
| ·ANTLR在构造预处理器中的作用 | 第21-23页 |
| 第四章 C/C++安全检查工具预处理器的设计与实现 | 第23-45页 |
| ·预处理器的整体结构 | 第23-24页 |
| ·主要数据结构的设计与实现 | 第24-27页 |
| ·宏定义存储的数据结构 | 第24-25页 |
| ·宏替换的数据结构 | 第25-26页 |
| ·词法及语法分析器数据结构 | 第26-27页 |
| ·预处理指令的分析与实现 | 第27-40页 |
| ·预处理指令种类 | 第27-28页 |
| ·宏定义相关预处理指令 | 第28-31页 |
| ·#define指令 | 第28-30页 |
| ·#undef指令 | 第30-31页 |
| ·条件编译相关预处理指令 | 第31-37页 |
| ·#if、#elif、#else、#endif指令 | 第31-36页 |
| ·#ifdef、#ifndef指令 | 第36-37页 |
| ·文件包含预处理指令 | 第37-38页 |
| ·#include指令 | 第37-38页 |
| ·其他预处理指令 | 第38-40页 |
| ·#line指令 | 第38-39页 |
| ·#error指令 | 第39-40页 |
| ·安全检查模块的设计 | 第40-45页 |
| ·预处理的安全分析 | 第40页 |
| ·预处理器的安全策略 | 第40-42页 |
| ·预处理器安全模块的设计 | 第42-45页 |
| 第五章 C/C++程序安全检查工具预处理器构造的关键技术 | 第45-55页 |
| ·预处理操作符 | 第45-48页 |
| ·字符串化操作符(#) | 第45-47页 |
| ·语言符号粘贴操作符(##) | 第47-48页 |
| ·宏展开的特殊情况 | 第48-53页 |
| ·宏的多重展开 | 第49-51页 |
| ·递归宏调用的处理 | 第51-52页 |
| ·可变参数宏的处理 | 第52-53页 |
| ·文件和行信息的保留 | 第53-54页 |
| ·C/C++检查工具的要求 | 第53-54页 |
| ·各种情况下文件和行信息的处理 | 第54页 |
| ·各种情况下空白的处理 | 第54-55页 |
| 第六章 结束语 | 第55-56页 |
| 致谢 | 第56-57页 |
| 参考文献 | 第57-59页 |
| 在校期间研究成果 | 第59-60页 |
| 附录A 简单计算器完整实现 | 第60-63页 |