[发明专利]基于寄存器传输语言确定静态函数调用关系的方法有效
| 申请号: | 201410016117.9 | 申请日: | 2014-01-14 |
| 公开(公告)号: | CN103744678B | 公开(公告)日: | 2017-05-03 |
| 发明(设计)人: | 向勇;汤卫东;杜香燕;孙卫真;马东超;杨彦卿;陆慧梅 | 申请(专利权)人: | 清华大学 |
| 主分类号: | G06F9/44 | 分类号: | G06F9/44 |
| 代理公司: | 北京中伟智信专利商标代理事务所11325 | 代理人: | 张岱 |
| 地址: | 100084*** | 国省代码: | 北京;11 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 基于 寄存器 传输 语言 确定 静态 函数 调用 关系 方法 | ||
技术领域
本发明涉及函数调用技术领域,具体设计一种基于寄存器传输语言确定静态函数调用关系的方法。
背景技术
随着源代码规模的扩大,单纯依靠手工阅读和分析源代码不仅效率低下,而且很难很快的了解整个源代码的结构和控制流程。因此,如何依靠软件工具和方法分析源代码变得越来越重要。
函数调用图是一种有向图,是对程序中函数调用关系的一种静态描述。在现有技术生成的函数调用图中,节点表示函数,有向边表示函数之间的调用与被调用关系。通过观察以函数为节点的函数调用关系图,人们可以方便地看出函数之间的调用关系;通过观察以文件或目录为节点的函数调用关系图,人们可以对大型程序或工程的体系结构有更加清晰的认识。
目前存在的函数调用图生成工具,要么只可以生成以函数为节点的函数调用图,不可以分析源代码程序模块间的关系;要么以源代码为基础生成函数调用关系图形,不能对.S文件进行分析;要么工具安装使用起来都比较复杂。在分析一些大型源代码工程,例如Linux内核源代码时,由于Linux源代码规模较大,而且更多的时候分析的是模块间的函数调用关系,和平台有关的.S文件,而且希望应用起来比较方便。这些要求对于现有的函数调用图生成工具都是达不到的。
发明内容
针对上述问题,本发明提供一种函数调用关系清晰,能够对多种文件的函数调用关系进行分析的基于寄存器传输语言确定静态函数调用关系的方法及装置。
为达到上述目的,本发明基于寄存器传输语言确定静态函数调用关系的方法,所述方法包括:
将源程序文件编译过程中产生的中间表示文件以寄存器传输语言的文件格式作为中间结果进行输出、转存;
对所述中间结果进行分析,得到各级目录的内部和外部调用函数关系文件;
基于所述各级目录的内部和外部调用函数关系文件,生成以函数、文件、模块为节点,以所述的函数、文件、模块之间的函数调用的次数为边的函数调用关系图来描述静态函数调用关系;
和/或基于所述各级目录的内部和外部调用函数关系文件,生成函数、文件、模块之间的函数调用关系列表来描述静态函数调用关系。
进一步地,所述方法还包括对生成的函数调用关系图和/或函数调用关系列表进行存储和显示的步骤。
具体地,所述函数调用图的生成方法具体包括步骤:
S1将第n级目录下的源程序文件W编译过程中得到中间表示文件以寄存器传输语言的文件格式作为中间结果进行输出、转存,其中所述中间结果包括所述源程序文件W的函数定义文件和函数调用信息文件;
S2对所述中间结果进行分析,将所述源程序文件W中所有定义的函数名写入同一文件,生成所述源程序文件W的定义函数名列表文件W1;
将所述函数调用信息文件中的被调用函数的函数名写入同一文件,形成所述源程序文件W的被调用函数名列表文件W2;
S3将所述定义函数名列表文件W1中的函数名和所述被调用函数名列表文件W2中的函数名进行匹配,
若函数名相匹配,则生成文件W的内部函数调用关系文件W3;
若函数名不匹配,则将所述被调用函数列表文件W2中的被调用函数的函数名和所述被调用函数对应的所述定义函数名列表文件W1中的调用函数的函数名写入同一文件,生成生成源程序文件W的外部函数调用关系文件W4,并将不匹配的被调用函数写入同一文件,生成源程序文件W的未定义函数列表文件W5;
S4对第n级目录下的每个源程序文件重复上述步骤S1至S3;
S5将第n级目录下所有的定义的函数名列表写入同一文件中,形成n级目录的定义函数名列表n1;
将n级目录下所有的未定义函数名列表文件中的函数名写入同一文件,形成第n级目录的未定义函数名列表文件n2;
S6将所述定义函数名列表文件n1中的函数名和所述未定义函数名列表文件n2中的函数名进行匹配,
若函数名相匹配,则生成第n级目录的内部函数调用关系文件n3;
若函数名不匹配,则将所述未定义函数名列表文件n2中的函数名和所述未定义函数名对应的所述定义函数名列表文件n1中的调用函数的函数名写入同一文件,生成生成第n级目录的的外部函数调用关系文件n4,并将不匹配的被调用函数写入同一文件,生成第n级目录的未定义函数列表文件n5;
重复上述步骤直至根目录,将根目录下的未定义函数名列表文件的函数名和根目录下的定义函数名列表文件中的函数名进行匹配,并生成根目录下的内部调用函数文件;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于清华大学,未经清华大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201410016117.9/2.html,转载请声明来源钻瓜专利网。
- 上一篇:一种业务流程处理方法及装置
- 下一篇:一种用于数据存储的方法与设备





