安全C语言程序验证器中验证条件生成器的扩展设计与实现
摘要 | 第5-6页 |
ABSTRACT | 第6-7页 |
第1章 绪论 | 第13-19页 |
1.1 研究背景 | 第13-15页 |
1.1.1 软件安全问题 | 第13-14页 |
1.1.2 形式化验证 | 第14页 |
1.1.3 研究现状 | 第14-15页 |
1.2 本文概述 | 第15-19页 |
1.2.1 研究工作 | 第15-17页 |
1.2.2 主要贡献 | 第17-18页 |
1.2.3 章节安排 | 第18-19页 |
第2章 Safe-C验证器 | 第19-27页 |
2.1 Safe-C与程序标注 | 第19页 |
2.2 Hoare逻辑 | 第19-20页 |
2.3 验证器的框架与验证流程 | 第20-22页 |
2.4 验证条件生成器的架构 | 第22-24页 |
2.5 单个函数的验证过程 | 第24-26页 |
2.6 本章小结 | 第26-27页 |
第3章 SCSL的扩展设计以及对应的演算规则 | 第27-45页 |
3.1 逻辑变量 | 第27-29页 |
3.2 幽灵代码 | 第29-31页 |
3.3 字符串 | 第31-37页 |
3.3.1 逻辑字符串 | 第31-32页 |
3.3.2 字符串类型的操作与内置函数 | 第32-34页 |
3.3.3 字符串的演算策略 | 第34-35页 |
3.3.4 字符串操作语句的演算规则 | 第35-37页 |
3.4 对函数协议的扩展 | 第37-44页 |
3.4.1 简单函数协议 | 第37-38页 |
3.4.2 带命名行为的函数协议 | 第38-43页 |
3.4.3 多协议 | 第43-44页 |
3.5 本章小结 | 第44-45页 |
第4章 语句的演算规则与事务的处理 | 第45-59页 |
4.1 部分语句的演算规则 | 第45-49页 |
4.1.1 goto语句和label语句 | 第46-47页 |
4.1.2 continue语句 | 第47页 |
4.1.3 break语句 | 第47-48页 |
4.1.4 switch语句 | 第48-49页 |
4.2 函数调用语句的演算规则 | 第49-54页 |
4.2.1 无逻辑变量时的演算过程 | 第49-50页 |
4.2.2 有逻辑变量时的演算过程 | 第50-54页 |
4.3 赋值语句前事务的处理 | 第54-58页 |
4.3.1 赋值语句前对量化断言的展开 | 第54-57页 |
4.3.2 赋值语句前对谓词的展开 | 第57-58页 |
4.4 本章小结 | 第58-59页 |
第5章 栈区内存模型 | 第59-67页 |
5.1 Hoare逻辑赋值规则与别名 | 第59-60页 |
5.2 栈区内存模型 | 第60-62页 |
5.3 验证点处断言和内存表的构造 | 第62-63页 |
5.3.1 函数入口处断言与内存表的构造 | 第62-63页 |
5.3.2 循环入口处断言与内存表的构造 | 第63页 |
5.4 取地址和解引用操作 | 第63-64页 |
5.5 别名判断算法 | 第64-65页 |
5.6 栈区赋值语句演算规则 | 第65-66页 |
5.6.1 栈区变量赋值 | 第65-66页 |
5.6.2 指针关系运算 | 第66页 |
5.7 本章小结 | 第66-67页 |
第6章 验证实例与测试分析 | 第67-77页 |
6.1 查找最大值和最小值函数的验证 | 第67-70页 |
6.2 字符串拷贝函数的验证 | 第70-71页 |
6.3 快速排序函数的验证 | 第71-74页 |
6.4 测试结果分析 | 第74-75页 |
6.5 本章小结 | 第75-77页 |
第7章 总结与展望 | 第77-79页 |
7.1 总结和相关工作对比 | 第77-78页 |
7.2 不足和进一步工作展望 | 第78-79页 |
参考文献 | 第79-83页 |
致谢 | 第83-85页 |
在读期间发表的学术论文与取得的其他研究成果 | 第85页 |