[发明专利]适用于虚函数和函数指针的静态函数调用图构建方法有效
申请号: | 201910492850.0 | 申请日: | 2019-06-06 |
公开(公告)号: | CN110187988B | 公开(公告)日: | 2021-08-13 |
发明(设计)人: | 顾乃杰;张帆;苏俊杰 | 申请(专利权)人: | 中国科学技术大学 |
主分类号: | G06F9/54 | 分类号: | G06F9/54 |
代理公司: | 安徽省合肥新安专利代理有限责任公司 34101 | 代理人: | 陆丽莉;何梅生 |
地址: | 230026 安*** | 国省代码: | 安徽;34 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 适用于 函数 指针 静态 调用 构建 方法 | ||
本发明公开了一种适用于虚函数和函数指针的静态函数调用图构建方法,其步骤包括:1获取源程序的中间代码;2获取中间代码中的关键信息,所述关键信息包括基本块顺序队列以及虚函数相关信息;3基于所述关键信息,对所述中间代码进行模拟执行,分析出所述中间代码中的函数调用指令调用的实际函数,同时记录下函数调用关系;4根据所述函数调用关系,构建出静态函数调用图。本发明能够全面的分析出虚函数、函数指针调用以及线程创建关系,而且能准确的分析出复杂的函数指针调用,从而能更好的帮助程序开发人员理解程序,同时提升依赖于函数调用图的静态分析方法的准确性。
技术领域
本发明涉及计算机软件技术领域,尤其涉及一种适用于虚函数和函数指针的静态函数调用图构建方法。
背景技术
现代软件系统的规模和复杂度不断提高,函数调用图也因此越来越受到重视。一方面,函数调用图可以帮助软件开发人员分析代码结构,理清代码逻辑。另一方面,函数调用图被广泛应用在程序静态分析领域。例如,函数调用图可以用来检测和消除程序中的死代码。函数调用图还可以与控制流图结合,形成过程间控制流图,这是程序静态分析中关于漏洞检测、安全分析等流敏感算法的基础。完备且准确的函数调用图可以更好的帮助程序开发人员理解程序,同时可以提升依赖于函数调用图的静态分析方法的准确性。
在目前构建函数调用图的方法中,主要分为动态分析和静态分析两种。动态分析方法查准率高,但构建完整的函数调用图较为困难,查全率不高。静态分析方法查全率高,同时能保持较高的查准率,因此更受欢迎。
目前已涌现许多用来构建静态函数调用图的方法,但现有的静态分析方法还存在较多问题,主要包括:1.目前还没有静态分析方法能全面的提取出虚函数、函数指针等函数调用关系。2.已有方法不能准确的分析出函数指针调用关系。3.对于使用多线程编程的程序,目前还没有方法可以静态提取线程间父子关系,线程函数的上下文信息在静态分析中全部丢失,这导致对多线程编程中死锁、数据竞争、伪共享等问题的静态检测准确性不高。
发明内容
本发明是为避免上述现有技术所存在的不足之处,提供一种适用于虚函数和函数指针的静态函数调用图构建方法,以期不仅能够全面的分析出虚函数、函数指针调用以及线程间父子关系,而且能准确的分析出复杂的函数指针调用,从而能更好的帮助程序开发人员理解代码并提升依赖于函数调用图的静态分析方法的准确性,具有较好的研究意义和实用价值。
为达到上述目的,本发明采用如下技术方案:
本发明一种适用于虚函数和函数指针的静态函数调用图构建方法的特点是按如下步骤进行:
步骤1、获取源程序的中间代码;
步骤2、获取中间代码中的关键信息,所述关键信息包括基本块顺序队列以及虚函数相关信息;
步骤3、指定静态分析入口函数,并基于所述关键信息,对所述中间代码进行模拟执行,分析出所述中间代码中的函数调用指令调用的实际函数,同时记录下函数调用关系;
步骤4、根据所述函数调用关系,构建出静态函数调用图。
本发明所述的适用于虚函数和函数指针的静态函数调用图构建方法的特点也在于,
所述步骤2中是按如下过程获取基本块顺序队列:
步骤2A_1、获取所述中间代码中第i个函数Fi所对应的控制流图CFGi,并根据所述控制流图CFGi得到CFGi所对应的入口基本块EntryBBi;i=1,2,…,FN,FN为中间代码中函数的总个数;
设置所述入口基本块EntryBBi为当前基本块,并将所述控制流图CFGi中所有循环的标识符记为“False”,表示未遍历到相应循环;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国科学技术大学,未经中国科学技术大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201910492850.0/2.html,转载请声明来源钻瓜专利网。