摘要 | 第5-6页 |
ABSTRACT | 第6-7页 |
缩略语对照表 | 第9-12页 |
第一章 绪论 | 第12-18页 |
1.1 研究背景 | 第12-14页 |
1.2 内核控制流程图获取技术现状 | 第14页 |
1.3 研究思路 | 第14-15页 |
1.3.1 直接函数调用 | 第15页 |
1.3.2 间接函数调用 | 第15页 |
1.3.3 函数返回地址 | 第15页 |
1.4 主要工作 | 第15-16页 |
1.5 论文结构 | 第16-18页 |
第二章 LLVM及Linux内核相关知识 | 第18-30页 |
2.1 LLVM编译器 | 第18-19页 |
2.2 LLVM编译器中间代码 | 第19-26页 |
2.2.1 LLVM标识符(Identifiers) | 第19-20页 |
2.2.2 结构体类型(Structure Types) | 第20页 |
2.2.3 全局变量(Global Variables) | 第20页 |
2.2.4 函数(Functions) | 第20-21页 |
2.2.5 函数类型(Function Type) | 第21页 |
2.2.6 内联汇编表达式(Inline Assembler Expressions) | 第21-22页 |
2.2.7 存储器存取和寻址操作 | 第22-25页 |
2.2.8 其它操作指令 | 第25-26页 |
2.3 Linux Kernel | 第26页 |
2.4 vmlinux和bzImage | 第26-27页 |
2.5 内核控制流程 | 第27-28页 |
2.6 本章小结 | 第28-30页 |
第三章 基于编译器的内核控制流程图获取 | 第30-54页 |
3.1 利用VMLinux.dump文件获取直接函数调用流程图原理 | 第30-32页 |
3.2 利用中间代码获得间接函数调用控制流程原理 | 第32-35页 |
3.3 中间代码分析过程 | 第35-51页 |
3.3.1 构建所有函数表funclist | 第35-36页 |
3.3.2 构建参数传递表argvlist | 第36-39页 |
3.3.3 处理函数指针保存过程 | 第39-44页 |
3.3.4 处理函数指针使用过程 | 第44-50页 |
3.3.5 获取间接函数调用目的函数方法总结 | 第50-51页 |
3.4 获取内核控制流程图步骤 | 第51-52页 |
3.5 本章小结 | 第52-54页 |
第四章 实验验证 | 第54-58页 |
4.1 LLVM编译Linux内核 | 第54-55页 |
4.1.1 生成vmlinux文件 | 第54页 |
4.1.2 生成中间代码文件 | 第54-55页 |
4.2 内核流程图获取原型系统 | 第55-56页 |
4.3 实验结果分析 | 第56-57页 |
4.4 本章小结 | 第57-58页 |
第五章 结论和展望 | 第58-62页 |
5.1 研究结论 | 第58页 |
5.2 存在的不足 | 第58-61页 |
5.2.1 顺序匹配法存在缺陷 | 第58-59页 |
5.2.2 中间代码不能合并问题 | 第59页 |
5.2.3 全局变量被多次赋值 | 第59页 |
5.2.4 内核反汇编文件中函数同名问题 | 第59-60页 |
5.2.5 函数指针保存过程数据不全 | 第60-61页 |
5.3 研究展望 | 第61-62页 |
参考文献 | 第62-64页 |
致谢 | 第64-65页 |
作者简介 | 第65-66页 |