| 第一章 绪论 | 第1-13页 |
| ·概述 | 第9-12页 |
| ·缓冲区溢出和堆栈溢出攻击 | 第9-10页 |
| ·当前信息安全面临的主要挑战-缓冲区溢出攻击 | 第10-12页 |
| ·主要工作 | 第12页 |
| ·本文组织 | 第12-13页 |
| 第二章 堆栈溢出攻击概述 | 第13-23页 |
| ·缓冲区/堆栈溢出攻击简介 | 第13-14页 |
| ·堆栈溢出攻击的固有原因 | 第14-15页 |
| ·C/C++缺乏安全机制 | 第14页 |
| ·导致缓冲区溢出的常见C和C++ 错误 | 第14-15页 |
| ·编程错误难以避免 | 第15页 |
| ·堆栈溢出攻击的原理 | 第15-22页 |
| ·进程的用户堆栈段 | 第15-16页 |
| ·程序运行过程中堆栈的作用 | 第16-18页 |
| ·程序运行过程中堆栈的变化 | 第18-21页 |
| ·Buffer Overflow 的机理 | 第21-22页 |
| ·ShellCode | 第22页 |
| ·小结 | 第22-23页 |
| 第三章 目前针对堆栈溢出攻击的防御手段 | 第23-32页 |
| ·STACKGUARD 和VS.NET 的/GS 选项 | 第23-26页 |
| ·原理 | 第23-25页 |
| ·VS.net 的/GS 选项 | 第25页 |
| ·Stackguard 的评价 | 第25-26页 |
| ·STACKSHIELD | 第26-28页 |
| ·LIBSAFE | 第28-29页 |
| ·其他方法 | 第29-31页 |
| ·ProPolice | 第30页 |
| ·不可执行缓冲区/堆栈 | 第30-31页 |
| ·页面可执行位NX | 第31页 |
| ·小结 | 第31-32页 |
| 第四章 GCC 编译器结构 | 第32-44页 |
| ·GCC 简介 | 第32-35页 |
| ·GCC 处理过程 | 第32-33页 |
| ·GCC 框架结构 | 第33-35页 |
| ·GCC的AST 表示 | 第35-38页 |
| ·RTL(REGISTER TRANSFER LANGUAGE) | 第38-43页 |
| ·RTL 作用 | 第38-39页 |
| ·RTL 定义 | 第39-42页 |
| ·从AST生成RTL | 第42-43页 |
| ·小结 | 第43-44页 |
| 第五章 分离参数和函数控制的双栈结构 | 第44-56页 |
| ·以前的双栈模型 | 第44-45页 |
| ·分离控制和数据信息的双栈模型 | 第45-54页 |
| ·双栈模型的运行环境-彻底分离数据和控制信息 | 第46-49页 |
| ·考虑到兼容性后的运行环境模型-只分离局部变量 | 第49-54页 |
| ·小结 | 第54-56页 |
| 第六章 试验-CRACK GCC | 第56-65页 |
| ·调试 | 第56-57页 |
| ·CRACKGCC 面临的三个的主要问题 | 第57-61页 |
| ·伪寄存器1vp,1vb 的设置 | 第57-59页 |
| ·数据栈的初始化 | 第59-60页 |
| ·在数据栈上分配局部变量 | 第60-61页 |
| ·进入代码和退出代码 | 第61页 |
| ·最终的目标代码分析和比较 | 第61-65页 |
| 第七章 总结与展望 | 第65-66页 |
| 参考文献 | 第66-68页 |
| 致谢 | 第68-69页 |
| 个人简历 | 第69页 |