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

被引量 : 0次 | 上传用户:wang____jiang
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
函数调用关系反映了软件系统中函数间的依赖关系,在程序的理解与分析、软件的测试与维护、编译优化、过程间数据流分析等众多软件工程领域中都有着广泛的应用。完整的函数调用关系可以更好地辅助程序验证和死锁分析,提升验证和分析结果的完备性。现有的静态分析方法多数在程序编译过程中获得函数调用关系,但得到的结果只能对程序实际执行时的函数调用作出近似表达,无法得到程序中需要在运行时动态确定的函数调用,影响了其分析结果的准确性,例如通过函数指针实现的函数调用,以及面向对象语言中的虚函数调用等。针对上述问题,本文提出了一种基于控制流图(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可以较为准确地分析函数指针和虚函数的调用,提升了分析结果的准确性,在开源代码分析中表现出了良好的性能,具有广泛的应用前景。
其他文献
大肠杆菌病为危害多种家畜和家禽的一类重要的传染病,给畜牧业生产造成严重的经济损失。临床中多采用抗生素来预防和治疗大肠杆菌病,增加了生产成本,同时造成抗生素的残留和
针对台湾与赣闽粤客家产业生态系统探讨,先以台湾苗栗客庄茶与陶客家文化的产业为研例,对未来的新海上丝路的客家产业生态策略发展提出论述。为了使其能够永续发展,进以提升
综合论述了围手术期低体温对患者的影响,以及围手术期低体温发生的原因和预防措施。围手术期低体温对麻醉复苏、切口感染、凝血功能、心血管系统具有一定影响
其爆破机理是利用被筒炸药瞬间爆破产生强烈的爆轰波冲击破碎8个钻孔周围的岩石而垮落。
多个智能车协作有助于解决路口交通事故和道路阻塞等实际问题,能够提高智能交通系统的安全性,并能高效的运行。采用实车来进行多车协作控制研究成本高,而软件仿真又不能体现
基质金属蛋白酶 (MMP)家族是降解细胞外基质的重要酶类。组织金属蛋白酶抑制物 (TIMP)是 MMP的天然抑制物。在细胞外基质中 MMP和 TIMP的失衡已证实与多种病理状态 ,尤其是与
煤炭行业经历了十年的黄金发展期,巨额的投资过后导致目前煤炭产能过剩严重,煤炭经济运行形势严峻,职工收入水平随之下降,在市场繁荣时掩盖的一些矿工个人心理问题与管理体制之间
目的:研究10天序贯疗法与经典三联疗法治疗厌食儿童幽门螺杆菌感染效果及差异性。方法:经13C-尿素呼吸试验证实为幽门螺杆菌感染的厌食儿童83例,分为三联疗法组41例,给予埃索
在悠久的中国文学传统中,20世纪是一个很重要的时代,在这个时代,中国文学不仅完成了从古典到现代的转型,而且出现了很多具有代表性的作家。许多优秀作家用他们的作品见证了这
研究背景有近15-25%结直肠癌病人表现为同时性肝转移,另有近50%病人在结直肠癌原发灶切除后2年出现异时性肝转移。近年来,综合治疗(手术为主)使结直肠癌肝转移的病人生存得到