一种获取程序中模块间函数接口的方法和系统技术方案

技术编号:8532494 阅读:187 留言:0更新日期:2013-04-04 15:17
本发明专利技术公开了一种获取程序中模块间函数接口的方法和系统,其中,获取程序中模块间函数接口的方法用于实现自动对模块间函数接口进行获取,包括如下步骤:通过静态扫描所述可执行程序,生成内部函数静态调用IFSC关系文件、外部函数调用EFC关系文件,及内部函数动态调用IFDC出口清单文件;在运行所述可执行程序时,基于所述IFDC出口清单文件,生成IFDC记录文件;基于所述EFC关系文件、所述IFSC关系文件及IFDC记录文件,获得所述可执行程序中模块间的函数调用关系表。

【技术实现步骤摘要】
一种获取程序中模块间函数接口的方法和系统
本专利技术涉及大型软件的模块接口技术,尤其涉及一种获取程序中模块间函数接口的方法和系统。
技术介绍
随着计算机技术和通信技术的不断发展,用户对软件系统的性能要求也越来越高,软件系统也变得越来越大,进而在现有技术中,产生了很多大型软件系统。在大型软件系统中,程序里包含了若干逻辑模块之间的相互作用,而这些逻辑模块之间的接口,会直接影响模块的程序架构中的模块耦合关系,对软件系统的综合性能影响很大。逻辑模块之间的接口除了在系统架构设计时考虑以外,还需要在后续的详细设计、编码实现中严格遵循接口说明书。因此,需要一种有效的手段,可以检查已实现的软件系统中,模块的实际接口情况,以便与接口设计进行对比,在发现接口差异可以进行及时修改。同时,在对旧的软件系统架构改造中,还需要对现有程序中的模块接口关系进行提取,然后在此基础上进行模块解耦,设计新的模块接口。而这也需要获取模块接口。程序模块之间的接口,包括函数接口与数据接口。对于函数接口,程序里的函数调用关系有两类,分别是内部函数调用IFC(InternalFunctionCalling)、外部函数调用EFC(ExternalFunctionCalling)。其中IFC的函数调用点和被调用函数都处于程序范围内,而EFC的被调用函数处于程序范围以外,通常为调用动态链接库内的函数。IFC根据调用形式的不同,还可以分为内部函数静态调用IFSC(InternalFunctionStaticCalling)和内部函数动态调用IFDC(InternalFunctionDynamicCalling)。静态调用指调用的目标函数在编译时已经确定,动态调用指调用的目标函数在编译时尚未明确,当程序运行到调用点时,才确定调用的目标函数。在现有技术中,获取模块函数接口的方法是:在编译链接程序的时候,利用编译器生成每个目标文件的函数依赖关系,然后汇总分析形成模块之间的函数接口关系。在实现本申请实施例中技术方案的过程中,本申请专利技术人发现现有技术中至少存在如下技术问题:在依赖于编译时对源码的依赖关系提取,无法适用于源码不完整的程序的接口分析;程序内回调函数等动态调用关系只能通过人工配置维护,无法自动提取;由于任务调度信息的传统获取方法的上述缺点,导致对模块函数接口的分析一直存在动态调用关系维护难度大、适用场景有限等问题。
技术实现思路
本专利技术提供一种获取程序中模块间函数接口的方法和系统,用于实现自动对模块间函数接口进行获取的目的。一方面,本专利技术通过本申请中的一个实施例,提供如下技术方案:一种获取程序中模块间函数接口的方法,用于获取可执行程序中模块间函数接口,所述方法包括:通过静态扫描所述可执行程序,生成内部函数静态调用IFSC关系文件、外部函数调用EFC关系文件,及内部函数动态调用IFDC出口清单文件;在运行所述可执行程序时,基于所述IFDC出口清单文件,生成IFDC记录文件;基于所述EFC关系文件、所述IFSC关系文件及IFDC记录文件,获得所述可执行程序中模块间的函数调用关系表。可选地,在所述基于所述EFC关系文件、所述IFSC关系文件及IFDC记录文件,获得所述可执行程序中模块间的函数调用关系表之后,基于所述可执行程序中模块间的实际函数接口关系及标准函数接口关系,获得所述可执行程序中模块间的函数接口变更信息。可选地,所述获得所述可执行程序中模块间的函数接口变更信息,具体包括:基于所述实际函数调用关系表和模块内部函数清单,获得所述可执行程序中模块间的实际函数接口关系;基于所述可执行程序的标准模块函数接口配置文件,获得所述可执行程序中模块间的标准函数接口关系;比较所述可执行程序中模块间的实际函数接口关系及标准函数接口关系,获得所述可执行程序中模块间的函数接口变更信息文件。可选地,所述通过静态扫描所述可执行程序,生成内部函数静态调用IFSC关系文件、外部函数调用EFC关系文件,及内部函数动态调用IFDC出口清单文件,具体包括:提取所述可执行程序中每个函数的用来表征每个函数特征的属性信息;分析所述可执行程序的重定位段,生成所述外部函数调用EFC关系文件;扫描所述可执行程序的每个函数的函数代码段,获得每个函数的函数调用指令;在所述函数调用指令中指定的函数调用方式为寄存器形式时,生成所述IFDC出口清单文件;在所述函数调用指令中指定的函数调用方式为操作数形式时,生成所述IFSC关系文件。可选地,所述每个函数的属性信息至少包括:函数名称、函数类型、函数开始地址和函数的代码段大小。可选地,所述在运行所述可执行程序时,基于所述IFDC清单文件,生成IFDC记录文件,具体包括:所述可执行程序运行时,执行所述可执行程序初始化段内的提取动态调用关系模块的初始化代码,以获得所述IFDC出口清单文件;执行每个函数头部内的动态调用关系模块的提取代码,以获得每个函数的上级函数调用出口地址;当所述IFDC出口清单文件中存在所述调用出口地址时且所述IFDC出口清单文件对应的目标函数列表中包括所述调用出口地址对应函数时,则记录所述调用出口地址对应函数的IFDC信息;当所述IFDC出口清单文件中存在所述调用出口地址时且所述IFDC出口清单文件对应的目标函数列表中不包括所述调用出口地址对应函数时,则在为所述调用出口地址对应函数建立新的IFDC关系之后,记录所述调用出口地址对应函数的IFDC信息;当所述可执行程序运行结束时,提取出每个函数的IFDC信息,在程序目录下生成所述IFDC记录文件。可选地,所述执行每个函数头部内的动态调用关系模块的提取代码,以获得每个函数的上级函数调用出口地址的步骤,具体包括:将从寄存器中,获取每个函数的上级函数调用出口的下一条指令的地址;修正所述下一条指令的地址,得到所述上级函数调用出口地址。可选地,所述基于所述EFC关系文件、所述IFSC关系文件及IFDC记录文件,获得所述可执行程序中模块间的函数调用关系表,具体包括:利用分析工具,对所述EFC关系文件、所述IFSC关系文件及IFDC记录文件进行解析,获得所述可执行程序中模块间的函数调用关系表。可选地,所述函数调用关系表中每条函数调用关系至少包括:父函数名称、调用出口地址、目标函数名称、调用方式、父函数对应源文件。此外,本专利技术还通过本申请中的另一实施例提供如下技术方案:一种获取程序中模块间函数接口的系统,用于获取可执行程序中模块间函数接口,所述系统包括:静态扫描单元,用于通过静态扫描所述可执行程序,生成内部函数静态调用IFSC关系文件、外部函数调用EFC关系文件,及内部函数动态调用IFDC出口清单文件;IFDC记录文件获得单元,用于在运行所述可执行程序时,基于所述IFDC出口清单文件,生成IFDC记录文件;函数调用关系获得单元,用于基于所述EFC关系文件、所述IFSC关系文件及IFDC记录文件,获得所述可执行程序中模块间的函数调用关系表。可选地,所述系统还包括:函数接口变更信息获得单元,用于基于所述可执行程序中模块间的实际函数接口关系及标准函数接口关系,获得所述可执行程序中模块间的函数接口变更信息。可选地,所述函数接口变更信息获得单元具体包括:第一获得单元,用于基于所述函数调用关系表,获得所述可执行程序中模块间的实本文档来自技高网
...
一种获取程序中模块间函数接口的方法和系统

【技术保护点】
一种获取程序中模块间函数接口的方法,用于获取可执行程序中模块间函数接口,其特征在于,所述方法包括:通过静态扫描所述可执行程序,生成内部函数静态调用IFSC关系文件、外部函数调用EFC关系文件,及内部函数动态调用IFDC出口清单文件;在运行所述可执行程序时,基于所述IFDC出口清单文件,生成IFDC记录文件;基于所述EFC关系文件、所述IFSC关系文件及IFDC记录文件,获得所述可执行程序中模块间的函数调用关系表。

【技术特征摘要】
1.一种获取程序中模块间函数接口的方法,用于获取可执行程序中模块间函数接口,其特征在于,所述方法包括:通过静态扫描所述可执行程序,生成内部函数静态调用IFSC关系文件、外部函数调用EFC关系文件,及内部函数动态调用IFDC出口清单文件;在运行所述可执行程序时,基于所述IFDC出口清单文件,生成IFDC记录文件;基于所述EFC关系文件、所述IFSC关系文件及IFDC记录文件,获得所述可执行程序中模块间的函数调用关系表;其中,在所述基于所述EFC关系文件、所述IFSC关系文件及IFDC记录文件,获得所述可执行程序中模块间的函数调用关系表之后,还包括:基于实际函数调用关系表和模块内部函数清单,获得所述可执行程序中模块间的实际函数接口关系;基于所述可执行程序的标准模块函数接口配置文件,获得所述可执行程序中模块间的标准函数接口关系;比较所述可执行程序中模块间的实际函数接口关系及标准函数接口关系,获得所述可执行程序中模块间的函数接口变更信息文件。2.如权利要求1所述的方法,其特征在于,所述通过静态扫描所述可执行程序,生成内部函数静态调用IFSC关系文件、外部函数调用EFC关系文件,及内部函数动态调用IFDC出口清单文件,具体包括:提取所述可执行程序中每个函数的用来表征每个函数特征的属性信息;分析所述可执行程序的重定位段,生成所述外部函数调用EFC关系文件;扫描所述可执行程序的每个函数的函数代码段,获得每个函数的函数调用指令;在所述函数调用指令中指定的函数调用方式为寄存器形式时,生成所述IFDC出口清单文件;在所述函数调用指令中指定的函数调用方式为操作数形式时,生成所述IFSC关系文件。3.如权利要求1所述的方法,其特征在于,所述在运行所述可执行程序时,基于所述IFDC出口清单文件,生成IFDC记录文件,具体包括:所述可执行程序运行时,执行所述可执行程序初始化段内的提取动态调用关系模块的初始化代码,以获得所述IFDC出口清单文件;执行每个函数头部内的动态调用关系模块的提取代码,以获得每个函数的上级函数调用出口地址;当所述IFDC出口清单文件中存在所述调用出口地址时且所述IFDC出口清单文件对应的目标函数列表中包括所述调用出口地址对应函数时,则记录所述调用出口地址对应函数的IFDC信息;当所述IFDC出口清单文件中存在所述调用出口地址时且所述IFDC出口清单文件对应的目标函数列表中不包括所述调用出口地址对应函数时,则在为所述调用出口地址对应函数建立新的IFDC关系之后,记录所述调用出口地址对应函数的IFDC信息;当所述可执行程序运行结束时,提取出每个函数的IFDC信息,在程序目录下生成所述IFDC记录文件。4.一种获取程序中模块间函数接口的系统,用于获取可执行程序中模块间函数接口,其特征在于,所述系统包括:静态扫描单元,用于通过静态扫描所述可执行程序,生成内部函数静态调用...

【专利技术属性】
技术研发人员:蒋嵩
申请(专利权)人:中兴通讯股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1