| 摘要 | 第1-4页 |
| Abstract | 第4-10页 |
| 第1章 绪论 | 第10-19页 |
| ·背景 | 第11-12页 |
| ·GCC编译系统体系结构 | 第12-14页 |
| ·编译器优化技术 | 第14-15页 |
| ·编译器验证技术相关研究 | 第15-18页 |
| ·本文的主要内容和工作 | 第18页 |
| ·论文组织 | 第18页 |
| ·小结 | 第18-19页 |
| 第2章 GCC优化分析 | 第19-33页 |
| ·去除冗余优化 | 第19-22页 |
| ·局部公共子表达式删除 | 第19-20页 |
| ·全局公共子表达式删除 | 第20-21页 |
| ·支持懒惰代码移动的一般部分冗余去除 | 第21-22页 |
| ·循环优化 | 第22-28页 |
| ·代码外提 | 第23页 |
| ·归纳变量的检测与删除 | 第23-24页 |
| ·强度削弱 | 第24-25页 |
| ·循环展开 | 第25-26页 |
| ·循环合并(Loop Jamming) | 第26-27页 |
| ·测试外提(Unswitching)-常量比较条件提取 | 第27-28页 |
| ·分支跳转优化 | 第28-30页 |
| ·指令预取优化 | 第29页 |
| ·IF转换支持 | 第29-30页 |
| ·分支预测 | 第30页 |
| ·跳转优化 | 第30页 |
| ·指令组合优化 | 第30-31页 |
| ·指令调度 | 第31页 |
| ·基于着色图的寄存器分配 | 第31-32页 |
| ·寄存器优化 | 第32页 |
| ·小结 | 第32-33页 |
| 第3章 GCC安全性分析 | 第33-61页 |
| ·去除冗余优化模块 | 第34-38页 |
| ·局部公共子表达式消除子模块 | 第34-35页 |
| ·全局公共子表达式消除子模块 | 第35-37页 |
| ·支持懒惰代码移动的一般部分冗余去除模块 | 第37-38页 |
| ·循环优化 | 第38-42页 |
| ·代码外提 | 第38-39页 |
| ·归纳变量的检测与删除 | 第39-40页 |
| ·强度削弱 | 第40-41页 |
| ·循环展开 | 第41-42页 |
| ·测试外提(Unswitching)-常量比较条件提取 | 第42页 |
| ·分支跳转优化 | 第42-47页 |
| ·指令预取优化 | 第42-43页 |
| ·IF转换支持 | 第43-45页 |
| ·分支预测 | 第45-46页 |
| ·跳转优化 | 第46-47页 |
| ·指令组合 | 第47-50页 |
| ·指令调度 | 第50-52页 |
| ·指令依赖关系计算 | 第50页 |
| ·指令的链表调度 | 第50-51页 |
| ·指令的扩展基本块调度(EBB调度) | 第51-52页 |
| ·可视化指令调度信息 | 第52页 |
| ·基于着色图的寄存器分配 | 第52-54页 |
| ·建立冲突图 | 第53-54页 |
| ·图着色 | 第54页 |
| ·添加溢出代码 | 第54页 |
| ·寄存器优化 | 第54-60页 |
| ·全局寄存器分配 | 第55-57页 |
| ·将伪寄存器重载为实际寄存器 | 第57-58页 |
| ·减少寄存器重载引起的负载 | 第58页 |
| ·移动/修改寄存器 | 第58-59页 |
| ·寄存器到堆栈转换 | 第59-60页 |
| ·小结 | 第60-61页 |
| 第4章 GCC安全性验证 | 第61-78页 |
| ·总体方案描述 | 第61-68页 |
| ·基本思路 | 第62-63页 |
| ·实施步骤 | 第63-66页 |
| ·编译器代码分析 | 第63页 |
| ·安全性保障断言和验证代码附加框架 | 第63-65页 |
| ·恶意代码嵌入位置分析和嵌入 | 第65-66页 |
| ·安全性确认测试 | 第66页 |
| ·参与人员角色与约束 | 第66-67页 |
| ·输出状态验证的方法研究 | 第67-68页 |
| ·实例分析 | 第68-77页 |
| ·强度削弱优化模块的安全性验证 | 第68-77页 |
| ·功能说明及代码分析 | 第68页 |
| ·恶意代码嵌入位置分析 | 第68-70页 |
| ·附加验证代码 | 第70页 |
| ·恶意代码嵌入 | 第70-74页 |
| ·安全性验证 | 第74-77页 |
| ·小结 | 第77-78页 |
| 第5章 总结 | 第78-80页 |
| 参考文献 | 第80-83页 |
| 致谢 | 第83-84页 |
| 作者简历 | 第84页 |