首页> 中文学位 >面向C/C++程序函数调用关系的静态分析方法研究
【6h】

面向C/C++程序函数调用关系的静态分析方法研究

代理获取

目录

声明

摘要

第一章 绪论

1.1 研究背景

1.2 国内外研究现状

1.3 论文的主要工作

1.4 论文的组织结构

第二章 技术背景

2.1 GCC编译器

2.2 GCC插件

2.3 C++的多态机制

2.4 C++类对象的内存分布

2.5 C++异常处理机制

2.6 本章小结

第三章 函数调用关系静态分析方法CR-CFG的设计

3.1 CR-CFG的框架设计

3.2 代码信息的静态提取

3.3 程序的模拟仿真

3.4 接口功能设计

3.5 本章小结

第四章 Linux平台下CR-CFG的实现

4.1 静态获取可执行文件依赖的文件列表

4.2 信息结构模型的建立

4.2.1 类型信息的结构模型

4.2.2 函数信息的结构模型

4.2.3 异常信息的建立

4.2.4 信息优化和分析路径的构建

4.3 函数指针的处理

4.3.1 C程序中的函数指针

4.3.2 C++程序中的函数指针

4.4 虚函数的处理

4.4.1 类型转换

4.4.2 虚函数调用的解析

4.5 模拟仿真算法

4.6 本章小结

第五章 测试与验证

5.1 测试环境

5.2 测试内容

5.2.1 C程序测试

5.2.2 C++程序测试

5.2.3 C/C++开源代码的测试

5.3 本章小结

第六章 总结和展望

6.1 本文总结

6.2 本文的主要工作

6.3 下一步工作计划和展望

参考文献

致谢

在读期间发表的学术论文与取得的研究成果

展开▼

摘要

函数调用关系反映了软件系统中函数间的依赖关系,在程序的理解与分析、软件的测试与维护、编译优化、过程间数据流分析等众多软件工程领域中都有着广泛的应用。完整的函数调用关系可以更好地辅助程序验证和死锁分析,提升验证和分析结果的完备性。现有的静态分析方法多数在程序编译过程中获得函数调用关系,但得到的结果只能对程序实际执行时的函数调用作出近似表达,无法得到程序中需要在运行时动态确定的函数调用,影响了其分析结果的准确性,例如通过函数指针实现的函数调用,以及面向对象语言中的虚函数调用等。
  针对上述问题,本文提出了一种基于控制流图(Control Flow Graph,CFG)的函数调用关系静态分析方法CR-CFG(Call Relations-CFG)。与已有静态分析方法相比,CR-CFG能够较为准确地分析函数指针和虚函数调用。本文的主要工作如下:
  (1)代码信息的静态提取。利用本文实现的GCC插件静态获取源文件中的类型定义和函数CFG等信息,并将获得的信息以格式化形式存入文件中。依据可执行文件名和make命令生成的信息,静态获取可执行文件依赖的所有源文件和目标文件的名称和路径,分析源文件和目标文件对应的类型和函数信息文件以及虚函数表文件,建立完整的类型和函数信息模型,并构建函数分析路径。
  (2)程序的模拟仿真。本文提出一种基于流敏感和上下文敏感的仿真算法,该算法依据已建立的信息模型,模拟程序执行过程,静态分析程序中每条分析路径上的语句。在分析过程中针对C/C++程序中的特殊语法作出相应处理,如与函数指针相关变量的赋值、函数指针和虚函数调用的解析,以及模拟异常处理等。
  (3)绘制函数调用图。基于仿真算法的分析结果,生成完整的函数调用关系,并利用Graphviz工具绘制函数调用图。
  (4)通过具体程序实例验证CR-CFG的正确性和完备性,并与现有的静态分析工具进行对比。同时为了验证程序的性能,对一些C/C++开源代码进行了相关测试。实验结果表明,本文提出的静态分析方法CR-CFG可以较为准确地分析函数指针和虚函数的调用,提升了分析结果的准确性,在开源代码分析中表现出了良好的性能,具有广泛的应用前景。

著录项

相似文献

  • 中文文献
  • 外文文献
  • 专利
代理获取

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号