一种动态链接方法及系统的制作方法

文档序号:6401795阅读:215来源:国知局

专利名称::一种动态链接方法及系统的制作方法
技术领域
:本发明属于计算机软件
技术领域
,尤其涉及一种动态链接方法及系统。
背景技术
:动态链接库(英文:DynamicLinkLibrary,简称:DLL)是一个包含可由多个程序同时使用的代码和数据的库,DLL不是一个可执行文件。动态链接提供了一种方法,使进程可以调用不属于其可执行代码的函数,函数的可执行代码位于一个DLL中,该DLL包含一个或多个已经被编译、链接并与使用它们的进程分开存储的函数。DLL还有助于共享数据和资源。但是动态链接依赖于系统的支持,在Linux系统下通过动态链接的函数就可以完成动态链接库的链接,而一些系统不支持动态链接。
发明内容本发明实施例的目的在于提供一种动态链接方法及系统,以解决现有技术存在的,一些系统不支持动态链接,应用无法调用动态链接库的问题。本发明的实施例是这样实现的,一种动态链接方法,所述方法包括以下步骤:读取可执行连接格式ELF的库,所述可执行连接格式ELF的库包括:库函数的跳转地址和库函数的代码段;复制库函数的跳转地址至应用的跳转表预留空间,复制库函数的代码段至应用的应用部分预留空间,所述库函数的代码段在库中和应用中的地址一致;应用调用库函数时,在应用的跳转表中查询库函数的跳转地址,根据所述库函数的跳转地址,跳转到库函数的代码段执行;库函数调用应用时,在应用的跳转表中查询应用对应的函数地址,根据所述应用对应的函数地址,跳转到应用的代码段执行。本发明的实施例的另一目的在于提供一种动态链接系统,所述系统包括:读取单元,用于读取可执行连接格式ELF的库,所述可执行连接格式ELF的库包括:库函数的跳转地址和库函数的代码段;复制单元,用于复制库函数的跳转地址至应用的跳转表预留空间,复制库函数的代码段至应用的应用部分预留空间,所述库函数的代码段在库中和应用中的地址一致;第一调用单元,用于应用调用库函数时,在应用的跳转表中查询库函数的跳转地址,根据所述库函数的跳转地址,跳转到库函数的代码段执行;第二调用单元,用于库函数调用应用时,在应用的跳转表中查询应用对应的函数地址,根据所述应用对应的函数地址,跳转到应用的代码段执行。本发明实施例通过将库函数的跳转地址以及库函数的代码段复制到应用中,使得应用和库函数可以相互调用,解决了现有技术存在的,一些系统不支持动态链接的情况下,应用无法调用动态链接库的问题。为了更清楚地说明本发明实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1是本发明实施例提供的动态链接方法的实现流程图;图2是本发明实施例提供的可执行连接格式的库的结构示意图;图3是本发明实施例提供的复制之前的应用的结构示意图;图4是本发明实施例提供的复制之后的应用的结构示意图;图5是本发明实施例提供的动态链接系统的模块结构图。具体实施例方式为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。本发明实施例提供了动态链接方法,所述方法的执行主体是动态库链接系统,所述方法如图1所示,具体步骤包括:S11、读取可执行连接格式(英文!ExecutableandLinkableFormat,简称:ELF)的库。在步骤所述Sll之前,ELF的库通过编译链接DLL和手工创建的跳转表构成,图2为可执行连接格式的库的结构示意图,所述ELF的库包括现行输出跳转表、虚拟输入跳转表和应用部分,所述现行输出跳转表存储库函数的跳转地址和属性,应用部分存储了库函数的代码段、数据和静态数据。S12、复制所述库函数的跳转地址至应用的跳转表预留空间,复制库函数的代码段至应用的应用部分预留空间。需要说明的是,库函数的跳转地址用于应用或者其它函数调用库函数时,通过所述库函数的跳转地址找到库函数的代码段的位置;库函数的代码段从库中复制到应用中,库函数的代码段存储的地址不变,否则通过库函数的跳转地址无法准确找到库函数的代码段。图3为复制之前的应用的结构示意图,图4为复制之后的应用的结构示意图,复制的过程包括:复制图2中现行输出跳转表至图3中虚拟输出跳转表,复制图2中的代码段、数据和静态数据区至图3中应用的应用部分预留的空间。S13、应用调用库函数时,在应用的跳转表查询库函数的跳转地址,根据所述库函数的跳转地址,跳转到库函数的代码段执行;S14、库函数调用应用时,在应用的跳转表中查询应用对应的函数地址,根据所述应用对应的函数地址,跳转到应用的代码段执行。需要说明的是,在没有复制库函数的跳转地址和库函数的代码段之前,在应用的跳转表中就存储有应用对应的函数地址。如图4所示,虚拟输出跳转表和现行输入跳转表统称应用的跳转表,在DLL结束部分上面的代码段、数据和静态数据是从库中复制过来的,DLL结束部分下面的代码、数据和静态数据是复制之前应用中存在的;步骤I是应用调用库函数时,在虚拟输出跳转表中找到库函数的跳转地址,然后步骤2是跳转到库函数的代码段执行;步骤3是库函数调用应用对应的函数时,在现行输入跳转表中找到应用对应的函数地址,然后步骤4是跳转到应用的代码段执行。需要说明的是,库函数和应用的函数之间可能会存在相互调用的关系,通过上述方法实现了库函数和应用的函数相互调用,使得应用和动态链接库方便、灵活地互相调用。在本实施例中,通过将库函数的跳转地址复制到应用的跳转表,可以使得应用调用库函数时,在应用的跳转表找到库函数的跳转地址并根据所述跳转地址跳转到库函数的代码段执行,实现了应用对动态链接库的调用,解决了现有技术存在的一些系统不支持动态链接时,应用无法调用动态链接库的问题。本发明实施例提供了动态链接系统,所述系统如图5所示,具体包括:读取单元51,用于读取ELF的库,所述ELF的库包括:库函数的跳转地址、库函数的属性、库函数的代码段、库函数的数据和库函数的静态数据。复制单元52,用于复制库函数的跳转地址至应用的跳转表预留空间,复制库函数的代码段至应用的应用部分预留空间,所述库函数的代码段在库中和应用中的地址一致。第一调用单元53,用于应用调用库函数时,在应用的跳转表中查询库函数的跳转地址,根据所述库函数的跳转地址,跳转到库函数的代码段执行。第二调用单元54,用于库函数调用应用时,在应用的跳转表中查询应用对应的函数地址,根据所述应用对应的函数地址,跳转到应用的代码段执行。本领域普通技术人员可以理解为上述实施例所包括的各个模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能模块的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。本领域普通技术人员还可以理解,实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,所述的程序可以在存储于可读取存储介质中,所述的存储介质,包括R0M/RAM等。以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。权利要求1.一种动态链接方法,其特征在于,所述方法包括:读取可执行连接格式ELF的库,所述可执行连接格式ELF的库包括:库函数的跳转地址和库函数的代码段;复制库函数的跳转地址至应用的跳转表预留空间,复制库函数的代码段至应用的应用部分预留空间,所述库函数的代码段在库中和应用中的地址一致;应用调用库函数时,在应用的跳转表中查询库函数的跳转地址,根据所述库函数的跳转地址,跳转到库函数的代码段执行;库函数调用应用时,在应用的跳转表中查询应用对应的函数地址,根据所述应用对应的函数地址,跳转到应用的代码段执行。2.如权利要求1所述的方法,其特征在于,所述读取可执行连接格式ELF的库之前包括:编译链接动态链接库DLL和手工创建的跳转表构成ELF的库。3.一种动态链接系统,其特征在于,所述系统包括:读取单元,用于读取可执行连接格式ELF的库,所述可执行连接格式ELF的库包括:库函数的跳转地址和库函数的代码段;复制单元,用于复制库函数的跳转地址至应用的跳转表预留空间,复制库函数的代码段至应用的应用部分预留空间,所述库函数的代码段在库中和应用中的地址一致;第一调用单元,用于应用调用库函数时,在应用的跳转表中查询库函数的跳转地址,根据所述库函数的跳转地址,跳转到库函数的代码段执行;第二调用单元,用于库函数调用应用时,在应用的跳转表中查询应用对应的函数地址,根据所述应用对应的函数地址,跳转到应用的代码段执行。4.如权利要求3所述的系统,其特征在于,所述系统还包括:编译单元,用于编译链接动态链接库DLL和手工创建的跳转表构成ELF的库。全文摘要本发明适用于计算机软件
技术领域
,提供了一种动态链接方法及系统,所述方法包括读取可执行连接格式ELF的库;复制库函数的跳转地址至应用的跳转表预留空间,复制库函数的代码段至应用的应用部分预留空间,所述库函数的代码段在库中和应用中的地址一致;应用调用库函数时,在应用的跳转表中查询库函数的跳转地址,根据所述库函数的跳转地址,跳转到库函数的代码段执行;库函数调用应用时,在应用的跳转表中查询应用对应的函数地址,根据所述应用对应的函数地址,跳转到应用的代码段执行。本发明通过将库函数的跳转地址和代码段复制到应用中,解决了现有技术存在的一些系统不支持动态链接库的情况下,应用无法调用动态链接库的问题。文档编号G06F17/30GK103218428SQ20131012111公开日2013年7月24日申请日期2013年4月9日优先权日2013年4月9日发明者刘高科申请人:深圳市九洲电器有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1