CN103365668A - 一种动态链接库装载和链接的方法、装置 - Google Patents
一种动态链接库装载和链接的方法、装置 Download PDFInfo
- Publication number
- CN103365668A CN103365668A CN2012100827994A CN201210082799A CN103365668A CN 103365668 A CN103365668 A CN 103365668A CN 2012100827994 A CN2012100827994 A CN 2012100827994A CN 201210082799 A CN201210082799 A CN 201210082799A CN 103365668 A CN103365668 A CN 103365668A
- Authority
- CN
- China
- Prior art keywords
- dynamic link
- link library
- processor unit
- instruction set
- set type
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
本发明实施例提供了一种动态链接库装载和链接的方法和装置,能够使得采用同一操作***、不同指令集架构处理器的设备之间共享相同功能的动态链接库。该方法包括:在装载完应用程序后,将所述应用程序需要调用的动态链接库装载到内存;处理器单元响应所述应用程序调用所述动态链接库的指令,若所述动态链接库的第一代码指令集类型与处理器单元的第二代码指令集类型不属于同一指令集类型,启动模拟处理器单元运行所述第一代码指令集类型的动态链接库获取执行结果,所述执行结果的代码类型为所述第二代码指令集类型。本发明实施例适用于动态链接库技术领域。
Description
技术领域
本发明涉及动态链接库技术领域,尤其涉及一种不同代码指令集类型的处理器下的动态链接库装载和链接的方法和装置。
背景技术
动态链接库为可执行的一组代码,用于完成应用程序中的某些数据的计算处理。如在创建应用程序时,不需要从头开始创建程序,而是可以调用动态链接库实现该应用程序的某些计算处理工作。但是该动态链接库中的文件必须与应用程序的指令集相同,这样在调用动态链接库时,该计算机***是可以执行该应用程序调用的动态链接库。
随着计算机技术的迅猛发展,计算机***使用的处理器和操作***也纷繁复杂。这样对于采用同一操作***、不同指令集架构处理器的计算机***之间,即使是具有相同功能的动态链接库文件也无法共享。
发明内容
本发明的实施例提供一种动态链接库装载和链接的方法和装置,能够使得采用同一操作***、不同指令集架构处理器的设备之间共享相同功能的动态链接库。
为达到上述目的,本发明的实施例采用如下技术方案:
一种动态链接库装载和链接的方法,包括:
在装载完应用程序后,将所述应用程序需要调用的动态链接库装载到内存;
处理器单元响应所述应用程序调用所述动态链接库的指令,若所述动态链接库的第一代码指令集类型与处理器单元的第二代码指令集类型不属于同一指令集类型,启动模拟处理器单元运行所述第一代码指令集类型的动态链接库获取执行结果,所述执行结果的代码类型为所述第二代码指令集类型。
一种动态链接库装载和链接的装置,包括处理器单元和模拟处理器单元,所述处理器单元,用于在装载完应用程序后,将所述应用程序需要调用的动态链接库装载到内存;
所述处理器单元,还用于响应所述应用程序调用所述动态链接库的指令,若所述动态链接库的第一代码指令集类型与处理器单元的第二代码指令集类型不属于同一指令集类型,启动模拟处理器单元运行所述第一代码指令集类型的动态链接库获取执行结果;
所述模拟处理器单元,用于响应所述处理器单元的启动指令,运行所述第一代码指令集类型的动态链接库获取执行结果,所述执行结果的代码类型为所述第二代码指令集类型。
本发明实施例提供了一种动态链接库的装载和链接的方法和装置,在装载完应用程序后,将所述应用程序需要调用的动态链接库装载到内存,处理器单元响应所述应用程序调用所述动态链接库的指令,首先判断所述动态链接库的第一代码指令集类型与处理器单元的第二代码指令集类型是否属于同一指令集类型,若所述动态链接库的代码指令集类型与处理器单元的代码指令集类型不属于同一指令集类型,处理器单元启动模拟处理器单元运行所述第一代码指令集类型的动态链接库获取执行结果,所述执行结果的代码类型为所述第二代码指令集类型。这样,通过采用模拟处理器单元执行第一代码指令集类型的动态链接库,从而使得采用同一操作***、不同指令集架构处理器单元的设备之间可以共享相同功能的动态链接库。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例一提供的一种动态链接库装载和链接的方法流程图;
图2为本发明实施例二提供的另一种动态链接库装载和链接的方法流程图;
图3为本发明实施例三提供的一种动态链接库装载和链接的装置结构框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例一、
本发明实施例提供了一种动态链接库装载和链接的方法,如图1所示,包括:
S101、在装载完应用程序后,将所述应用程序需要调用的动态链接库装载到内存。
所述动态链接库是编译产生的可执行代码文件,包括了至少一个函数,例如动态链接库aa.dll中包含了sum(x,y)、max(x,y,z),sin(x)三个函数,分别用于计算x,y之和,x,y和z三个数的最大值,x的正弦函数值,这三个函数可以被用于应用程序的不同功能模块中。
当某一应用程序在执行过程中,首先应用程序被装载到内存中后,然后将该应用程序需要调用的动态链接库也装载到内存中。应用程序和动态链接库作为两个独立的文件被分别装载不同的内存区域中。
当然,在装载完应用程序和动态链接库后,处理器单元需要对该动态链接库进行重定位。即建立动态链接库在内存中的新地址和应用程序需要调用该动态链接库的应用程序的位置之间的对应关系,或者更新应用程序调用动态链接库的列表中的动态链接库的地址,以便于在应用程序运行过程中能够准确调用到相应的动态链接库。
S102、处理器单元响应所述应用程序调用所述动态链接库的指令,若所述动态链接库的第一代码指令集类型与处理器单元的第二代码指令集类型不属于同一指令集类型,启动模拟处理器单元运行所述第一代码指令集类型的动态链接库获取执行结果,所述执行结果的代码类型为所述第二代码指令集类型。
在应用程序执行过程中,应用程序调用所述动态链接库,处理器单元响应所述应用程序调用所述动态链接库的指令。若所述动态链接库的第一代码指令集类型与处理器单元的第二代码指令集类型不属于同一指令集类型,处理器单元启动模拟处理器单元运行所述第一代码指令集类型的动态链接库,并获取执行结果,所述执行结果的代码类型为所述第二代码指令集类型,同时处理器单元将该执行结果返回给上述应用程序。
若所述动态链接库的第一代码指令集类型与处理器单元的第二代码指令集类型属于同一指令集类型,处理器单元直接运行所述动态链接库,获取执行结果,将该执行结果返回给上述的应用程序。
例如,在Android***下,编译后的动态链接库aa.dll可在ARM7的处理器环境下运行。该动态链接库aa.dll实现的功能在其它处理器环境下也同样需要被使用,如在Android***下,对于采用X86处理器的智能手机。但是如果把动态链接库aa.dll直接移植到采用X86处理器的智能手机上,X86处理器无法直接运行aa.dll中的函数。
为了节约资源和开发成本,这样X86处理器确定动态链接库ARM7处理器的代码指令集类型与X86处理器的代码指令集类型不同,X86处理器需要启动模拟处理器,该模拟处理器模拟ARM7处理器,可以执行ARM7代码指令集类型的动态链接库,X86获取模拟处理器的执行结果,并将该执行结果在返回给在X86处理器环境下运行的调用该动态链接库的应用程序。然后处理器跳回到应用程序调用动态链接库的中断处,继续执行应用程序。
本发明实施例提供了一种动态链接库的装载和链接的方法和装置,在装载完应用程序后,将所述应用程序需要调用的动态链接库装载到内存,处理器单元响应所述应用程序调用所述动态链接库的指令,首先判断所述动态链接库的第一代码指令集类型与处理器单元的第二代码指令集类型是否属于同一指令集类型,若所述动态链接库的代码指令集类型与处理器单元的代码指令集类型不属于同一指令集类型,处理器单元启动模拟处理器单元运行所述第一代码指令集类型的动态链接库获取执行结果,所述执行结果的代码类型为所述第二代码指令集类型。这样,通过采用模拟处理器单元执行第一代码指令集类型的动态链接库,从而使得采用同一操作***、不同指令集架构处理器的设备之间可以共享相同功能的动态链接库。
实施例二、
本发明实施例提供了一种动态链接库装载和链接的方法,如图2所示,包括:
S201、在装载完应用程序后,将所述应用程序需要调用的动态链接库装载到内存。
所述动态链接库是编译产生的可执行代码文件,包括了至少一个函数,例如动态链接库aa.dll中包含了sum(x,y)、max(x,y,z),sin(x)三个函数,分别用于计算x,y之和,x,y和z三个数的最大值,x的正弦函数值,这三个函数可以被用于应用程序的不同功能模块中。
当某一应用程序在执行过程中,首先应用程序被装载到内存中后,然后将该应用程序需要调用的动态链接库也装载到内存中。应用程序和动态链接库作为两个独立的文件被分别装载不同的内存区域中。
当然,在装载完应用程序和动态链接库后,处理器单元需要对该动态链接库进行重定位。即建立动态链接库在内存中的新地址和应用程序需要调用该动态链接库的应用程序的位置之间的对应关系,或者更新应用程序调用动态链接库的列表中的动态链接库的地址,以便于在应用程序运行过程中能够准确调用到相应的动态链接库。
S202、处理器单元判断所述动态链接库的第一代码指令集类型与处理器单元的第二代码指令集类型是否属于同一指令集类型。
若动态链接库的代码指令集类型与处理器单元的代码指令集类型属于同一指令集类型,则执行S203。
若动态链接库的代码指令集类型与处理器单元的代码指令集类型属于同一指令集类型,则在应用程序运行过程中,可以直接调用该动态链接库进行执行,具体的执行过程属于现有技术,本方案在此不作限定。
根据所述应用程序需要调用的动态链接库,处理器单元将所述动态链接库装载到所述内存后,处理器单元会判断动态链接库的第一代码指令集类型与处理器单元的第二代码指令集类型是否属于同一指令集类型。例如,动态链接库的专门字段存储有该动态链接库的指令集类型码的标识,处理器单元通过获得该动态链接库的指令集类型码的标识,将该标识与处理器单元的动态链接库的指令集类型码标识进行比较,从而可以确定所述动态链接库的第一代码指令集类型是否与处理器单元的第二代码指令集类型属于同一指令集类型。
S203、处理器单元构建所述动态链接库的跳转表,所述跳转表包括所述动态链接库在所述内存中的起始地址、模拟处理器单元的起始地址和所述模拟处理器单元的初始化信息。
若所述动态链接库的第一代码指令集类型与所述处理器单元的第二代码指令集类型不属于同一代码指令集类型时,为了处理器单元可以运行该应用程序调用的动态链接库,处理器单元构建该动态链接库的跳转表,该跳转表包括所述动态链接库在所述内存中的起始地址,模拟处理器单元的起始地址和该动态链接库的代码指令集类型对应的所述模拟处理器单元的初始化信息。
相应的,处理器单元建立该动态链接库的跳转表与该应用程序调用该动态链接库的对应关系。例如,处理器单元可以将该动态链接库的跳转表的地址写入应用程序调用该动态链接库的函数调用表中。
S204、处理器单元响应所述应用程序调用所述动态链接库的指令,根据所述跳转表中的所述模拟处理器单元的初始化信息对所述模拟处理器单元进行初始化配置。
这样在应用程序调用该动态链接库时,首先处理器单元根据所述动态链接库的代码指令集类型和该动态链接库的跳转表中的模拟处理器单元的起始地址,对所述模拟处理器单元的初始化信息进行配置,如配置模拟处理器单元的寄存器、中断地址等初始化信息。
S205、处理器单元根据所述跳转表中的所述动态链接库在所述内存中的起始地址指示模拟处理器单元从所述内存中调用所述动态链接库。
在对模拟处理器单元配置了初始化信息后,模拟处理器单元根据所述动态链接库在所述内存中的起始地址,从所述内存中调用所述动态链接库的执行代码。
S206、处理器单元指示模拟处理器单元将所述动态链接库转换为第二代码指令集类型的代码并运行获取执行结果,所述执行结果为所述第二代码指令集类型的代码。
在模拟处理器单元从所述内存中调用所述动态链接库的执行代码后,处理器单元指示模拟处理器单元所述动态链接库的执行代码转化为第二代码指令集类型的代码,并运行该第二代码指令集类型的代码获取执行结果。然后模拟处理器单元将该执行结果返回给应用程序。
可选的,在根据所述跳转表中存储的所述动态链接库在所述内存中的起始地址,处理器单元指示模拟处理器单元从所述内存中调用所述动态链接库后,模拟处理器单元可以直接运行该第一代码指令集类型的动态链接库,并获得所述第一代码指令集类型的执行结果,然后模拟处理器单元将所述第一代码指令集类型的执行结果转换为所述第二代码指令集类型的代码。
可选的,所述跳转表中还可以包括所述动态链接库是否还需要被调用的信息。这样在启动模拟处理器单元运行所述第二代码指令集类型的动态链接库获取执行结果后,若所述动态链接库不需要被调用,则处理器单元在内存中可以删除所述动态链接库。这样可以及时释放内存的占用空间。
相应的,为了及时释放内存的占用空间,处理器单元还可以及时删除模拟处理器单元执行所述动态链接库所占用的空间。
本发明实施例提供了一种动态链接库的装载和链接的方法,在动态链接库装载过程中,若所述动态链接库的第一代码指令集类型与所述处理器单元的第二代码指令集类型不同,则处理器单元建立该动态链接库的跳转表,并建立该动态链接库的跳转表与该应用程序调用动态链接库的对应关系。这样在应用程序执行过程中调用该动态链接库时,处理器单元相应应用程序调用该动态链接库的指令,启动模拟处理器单元执行所述动态链接库,这样处理器单元可以执行不同代码指令集类型的动态链接库,从而使得采用同一操作***、不同指令集架构处理器单元的设备之间可以共享相同功能的动态链接库。
实施例三、
本发明实施例提供了一种动态链接库装载和链接的装置30,如图3所示,包括处理器单元31和模拟处理器单元32。
所述处理器单元31,用于在装载完应用程序后,将所述应用程序需要调用的动态链接库装载到内存。
所述动态链接库是编译产生的可执行代码文件,包括了至少一个函数,例如动态链接库aa.dll中包含了sum(x,y)、max(x,y,z),sin(x)三个函数,分别用于计算x,y之和,x,y和z三个数的最大值,x的正弦函数值,这三个函数可以被用于应用程序的不同功能模块中。
当某一应用程序在装载过程中,首先所述处理器单元31将应用程序装载到内存中后,然后将该应用程序需要调用的动态链接库也装载到内存中。应用程序和动态链接库作为两个独立的文件被分别装载不同的内存区域中。
当然,在装载完应用程序和动态链接库后,处理器单元31需要对该动态链接库进行重定位。即建立动态链接库在内存中的新地址和应用程序需要调用该动态链接库的位置之间的对应关系,或者更新应用程序调用动态链接库的列表中的动态链接库的地址,以便于在应用程序运行过程中能够准确调用到相应的动态链接库。
所述处理器单元31,还用于响应所述应用程序调用所述动态链接库的指令,若所述动态链接库的第一代码指令集类型与处理器单元31的第二代码指令集类型不属于同一指令集类型,启动模拟处理器单元32运行所述第一代码指令集类型的动态链接库获取执行结果。
在应用程序执行过程中,应用程序调用所述动态链接库,处理器单元31响应所述应用程序调用所述动态链接库的指令。若所述动态链接库的第一代码指令集类型与处理器单元31的第二代码指令集类型不属于同一指令集类型,处理器单元31启动模拟处理器单元32运行所述第一代码指令集类型的动态链接库,并获取执行结果,所述执行结果的代码类型为所述第二代码指令集类型,同时处理器单元31将该执行结果返回给上述应用程序。
若所述动态链接库的第一代码指令集类型与处理器单元31的第二代码指令集类型属于同一指令集类型,处理器单元31直接运行所述动态链接库,获取执行结果,将该执行结果返回给上述的应用程序。
例如,在Android***下,编译后的动态链接库aa.dll可在ARM7的处理器环境下运行。该动态链接库aa.dll实现的功能在其它处理器环境下也同样需要被使用,如在Android***下,对于采用X86处理器的智能手机。但是如果把动态链接库aa.dll直接移植到采用X86处理器的智能手机上,X86处理器无法直接运行aa.dll中的函数。
为了节约资源和开发成本,这样处理X86处理器确定该动态链接库的ARM7代码指令集类型与X86处理器的代码指令集类型不同,X86处理器启动模拟处理器,该模拟处理器模拟ARM7处理器,可以执行ARM7代码指令集类型的动态链接库,X86获取模拟处理器的执行结果,并将该执行结果在返回给在X86处理器环境下运行的调用该动态链接库的应用程序。然后X86处理器跳回到应用程序调用动态链接库的中断处,继续执行应用程序。
所述模拟处理器单元32,用于响应所述处理器单元31的启动指令,运行所述第一代码指令集类型的动态链接库获取执行结果,所述执行结果的代码类型为所述第二代码指令集类型。
进一步的,所述处理器单元31,还用于判断所述动态链接库的第一代码指令集类型与处理器单元31的第二代码指令集类型是否属于同一指令集类型;若所述动态链接库的第一代码指令集类型与处理器单元31的第二代码指令集类型不属于同一指令集类型,构建所述动态链接库的跳转表,所述跳转表包括所述动态链接库在所述内存中的起始地址、所述模拟处理器单元32的起始地址和所述模拟处理器单元32的初始化信息。
处理器单元31将所述动态链接库装载到所述内存后,判断动态链接库的第一代码指令集类型与处理器单元31的第二代码指令集类型是否属于同一指令集类型。例如,动态链接库的专门字段存储有该动态链接库的指令集类型码的标识,处理器单元31通过获得该动态链接库的指令集类型码的标识,将该标识与处理器单元31的动态链接库的指令集类型码标识进行比较,从而可以确定所述动态链接库的第一代码指令集类型是否与处理器单元31的第二代码指令集类型属于同一指令集类型。
若所述动态链接库的第一代码指令集类型与所述处理器单元31的第二代码指令集类型不属于同一代码指令集类型时,为了处理器单元31可以运行该应用程序调用的动态链接库,处理器单元31构建该动态链接库的跳转表,该跳转表包括所述动态链接库在所述内存中的起始地址,模拟处理器单元32的起始地址和该动态链接库的代码指令集类型对应的所述模拟处理器单元32的初始化信息。
相应的,处理器单元31建立该动态链接库的跳转表与该应用程序调用该动态链接库的对应关系。例如,处理器单元31可以将该动态链接库的跳转表的地址写入应用程序调用该动态链接库的函数调用表中。
可选的,所述处理器单元31响应所述应用程序调用所述动态链接库的指令,启动模拟处理器单元32运行所述第一代码指令集类型的动态链接库获取执行结果,所述执行结果的代码类型为所述第二代码指令集类型包括:
所述处理器单元31根据所述跳转表中的所述模拟处理器单元32的初始化信息对所述模拟处理器单元32进行初始化配置;
所述处理器单元31根据所述跳转表中的所述动态链接库在所述内存中的起始地址指示模拟处理器单元32从所述内存中调用所述动态链接库;
所述处理器单元31指示模拟处理器单元32将所述动态链接库转换为第二代码指令集类型的代码并运行获取执行结果,所述执行结果为所述第二代码指令集类型的代码。
具体的,在应用程序调用该动态链接库时,首先处理器单元31根据所述动态链接库的代码指令集类型和该动态链接库的跳转表中的模拟处理器单元32的起始地址,对所述模拟处理器单元32的初始化信息进行相应配置,如配置动态链接库的第一代码指令集类型对应的模拟处理器单元32的寄存器、中断地址等初始化信息。
在对模拟处理器单元32配置了初始化信息后,模拟处理单元32器根据所述动态链接库在所述内存中的起始地址,从所述内存中调用所述动态链接库的执行代码。
在模拟处理器单元32从所述内存中调用所述动态链接库的执行代码后,处理器单元31指示模拟处理器单元32将所述动态链接库的执行代码转化为第二代码指令集类型的代码,并运行该第二代码指令集类型的代码获取执行结果。然后模拟处理器单元32将该执行结果返回给应用程序。
可选的,所述处理器单元31响应所述应用程序调用所述动态链接库的指令,启动模拟处理器单元32运行所述第一代码指令集类型的动态链接库获取执行结果,所述执行结果的代码类型为所述第二代码指令集类型还可以包括:
所述处理器单元31根据所述跳转表中的所述模拟处理器单元32的初始化信息对所述模拟处理器单元32进行初始化配置;
所述处理器单元31根据所述跳转表中的所述动态链接库在所述内存中的起始地址指示模拟处理器单元32从所述内存中调用所述动态链接库;
所述处理器单元31指示模拟处理器单元32运行所述动态链接库获得所述第一代码指令集类型的执行结果;
模拟处理器单元32将所述第一代码指令集类型的执行结果转换为所述第二代码指令集类型的代码。
可选的,所述处理器单元31构建的跳转表中还包括所述动态链接库是否还需要被调用的信息;
所述处理器单元31,还可以用于若所述动态链接库不需要被调用,则在内存中删除所述动态链接库。这样可以及时释放内存的占用空间。
相应的,为了及时释放内存的占用空间,处理器单元31还可以及时删除模拟处理器单元32执行所述动态链接库所占用的空间。
本发明实施例提供了一种动态链接库的装载和链接的方法,在动态链接库装载过程中,若所述动态链接库的第一代码指令集类型与所述处理器单元的第二代码指令集类型不同,则处理器单元首先建立该动态链接库的跳转表,并建立该动态链接库的跳转表与该应用程序调用动态链接库的对应关系。这样在应用程序执行过程中,处理器单元响应应用程序调用该动态链接库的指令,启动模拟处理器单元执行所述动态链接库,这样处理器单元可以执行不同代码指令集类型的动态链接库,从而使得采用同一操作***、不同指令集架构处理器的设备之间可以共享相同功能的动态链接库。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
Claims (10)
1.一种动态链接库装载和链接的方法,其特征在于,包括:
在装载完应用程序后,将所述应用程序需要调用的动态链接库装载到内存;
处理器单元响应所述应用程序调用所述动态链接库的指令,若所述动态链接库的第一代码指令集类型与处理器单元的第二代码指令集类型不属于同一指令集类型,启动模拟处理器单元运行所述第一代码指令集类型的动态链接库获取执行结果,所述执行结果的代码类型为所述第二代码指令集类型。
2.根据权利要求1所述的方法,其特征在于,在所述将所述应用程序需要调用的动态链接库装载到内存后,还包括:
判断所述动态链接库的第一代码指令集类型与处理器单元的第二代码指令集类型是否属于同一指令集类型;
若所述动态链接库的第一代码指令集类型与处理器单元的第二代码指令集类型不属于同一指令集类型,构建所述动态链接库的跳转表,所述跳转表包括所述动态链接库在所述内存中的起始地址、所述模拟处理器单元的起始地址和所述模拟处理器单元的初始化信息。
3.根据权利要求2所述的方法,其特征在于,所述启动模拟处理器单元运行所述第一代码指令集类型的动态链接库获取执行结果,所述执行结果的代码类型为所述第二代码指令集类型包括:
根据所述跳转表中的所述模拟处理器单元的初始化信息对所述模拟处理器单元进行初始化配置;
根据所述跳转表中的所述动态链接库在所述内存中的起始地址指示模拟处理器单元从所述内存中调用所述动态链接库;
指示模拟处理器单元将所述动态链接库转换为第二代码指令集类型的代码并运行获取执行结果,所述执行结果为所述第二代码指令集类型的代码。
4.根据权利要求2所述的方法,其特征在于,所述启动模拟处理器单元运行所述第一代码指令集类型的动态链接库获取执行结果,所述执行结果的代码类型为所述第二代码指令集类型包括:
根据所述跳转表中的所述模拟处理器单元的初始化信息对所述模拟处理器单元进行初始化配置;
根据所述跳转表中的所述动态链接库在所述内存中的起始地址指示模拟处理器单元从所述内存中调用所述动态链接库;
指示模拟处理器单元运行所述动态链接库获得所述第一代码指令集类型的执行结果;
模拟处理器单元将所述第一代码指令集类型的执行结果转换为所述第二代码指令集类型的代码。
5.根据权利要求2-4任一项所述的方法,其特征在于,所述跳转表中还包括所述动态链接库是否还需要被调用的信息;
在启动模拟处理器单元运行所述第二代码指令集类型的动态链接库获取执行结果后,还包括:
若所述动态链接库不需要被调用,则在内存中删除所述动态链接库。
6.一种动态链接库装载和链接的装置,包括处理器单元和模拟处理器单元,其特征在于,所述处理器单元,用于在装载完应用程序后,将所述应用程序需要调用的动态链接库装载到内存;
所述处理器单元,还用于响应所述应用程序调用所述动态链接库的指令,若所述动态链接库的第一代码指令集类型与处理器单元的第二代码指令集类型不属于同一指令集类型,启动模拟处理器单元运行所述第一代码指令集类型的动态链接库获取执行结果;
所述模拟处理器单元,用于响应所述处理器单元的启动指令,运行所述第一代码指令集类型的动态链接库获取执行结果,所述执行结果的代码类型为所述第二代码指令集类型。
7.根据权利要求6所述的装置,其特征在于,所述处理器单元,还用于判断所述动态链接库的第一代码指令集类型与处理器单元的第二代码指令集类型是否属于同一指令集类型;
若所述动态链接库的第一代码指令集类型与处理器单元的第二代码指令集类型不属于同一指令集类型,构建所述动态链接库的跳转表,所述跳转表包括所述动态链接库在所述内存中的起始地址、所述模拟处理器单元的起始地址和所述模拟处理器单元的初始化信息。
8.根据权利要求7所述的装置,其特征在于,所述处理器单元,用于启动模拟处理器单元运行所述第一代码指令集类型的动态链接库获取执行结果,所述执行结果的代码类型为所述第二代码指令集类型包括:
根据所述跳转表中的所述模拟处理器单元的初始化信息对所述模拟处理器单元进行初始化配置;
根据所述跳转表中的所述动态链接库在所述内存中的起始地址指示模拟处理器单元从所述内存中调用所述动态链接库;
指示模拟处理器单元将所述动态链接库转换为第二代码指令集类型的代码并运行获取执行结果,所述执行结果为所述第二代码指令集类型的代码。
9.根据权利要求7所述的装置,其特征在于,所述处理器单元,用于启动模拟处理器单元运行所述第一代码指令集类型的动态链接库获取执行结果,所述执行结果的代码类型为所述第二代码指令集类型包括:
根据所述跳转表中的所述模拟处理器单元的初始化信息对所述模拟处理器单元进行初始化配置;
根据所述跳转表中的所述动态链接库在所述内存中的起始地址指示模拟处理器单元从所述内存中调用所述动态链接库;
指示模拟处理器单元运行所述动态链接库获得所述第一代码指令集类型的执行结果;
模拟处理器单元将所述第一代码指令集类型的执行结果转换为所述第二代码指令集类型的代码。
10.根据权利要求7-9任一项所述的装置,其特征在于,所述处理器单元构建的跳转表中还包括所述动态链接库是否还需要被调用的信息;
所述处理器单元,还用于若所述动态链接库不需要被调用,则在内存中删除所述动态链接库。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210082799.4A CN103365668B (zh) | 2012-03-26 | 2012-03-26 | 一种动态链接库装载和链接的方法、装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210082799.4A CN103365668B (zh) | 2012-03-26 | 2012-03-26 | 一种动态链接库装载和链接的方法、装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103365668A true CN103365668A (zh) | 2013-10-23 |
CN103365668B CN103365668B (zh) | 2017-12-26 |
Family
ID=49367102
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210082799.4A Active CN103365668B (zh) | 2012-03-26 | 2012-03-26 | 一种动态链接库装载和链接的方法、装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103365668B (zh) |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104021012A (zh) * | 2014-05-16 | 2014-09-03 | 可牛网络技术(北京)有限公司 | 应用程序的下载方法、执行异常的分析方法和装置 |
WO2017015856A1 (zh) * | 2015-07-28 | 2017-02-02 | 华为技术有限公司 | 一种调用操作***库的方法、装置及*** |
CN106951270A (zh) * | 2017-04-06 | 2017-07-14 | 腾讯科技(深圳)有限公司 | 一种代码处理方法、***及服务器 |
CN106990993A (zh) * | 2017-04-18 | 2017-07-28 | 北京元心科技有限公司 | 多***的基础库文件加载方法及装置 |
CN108469967A (zh) * | 2017-02-23 | 2018-08-31 | 银联数据服务有限公司 | 一种交易数据处理方法和交易*** |
CN108958824A (zh) * | 2017-05-18 | 2018-12-07 | 龙芯中科技术有限公司 | 应用程序的启动方法、装置、电子设备及存储介质 |
CN110378081A (zh) * | 2019-06-06 | 2019-10-25 | 厦门网宿有限公司 | 一种加壳动态链接库加载方法及装置 |
CN111240752A (zh) * | 2019-12-31 | 2020-06-05 | 北京元心科技有限公司 | 操作***自适配方法及*** |
CN113110890A (zh) * | 2021-04-20 | 2021-07-13 | 上海华东汽车信息技术有限公司 | 动态链接库调用方法、装置、计算机设备和存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1731347A (zh) * | 2004-08-06 | 2006-02-08 | 梁肇新 | 基于Linux的Windows软件兼容层体系结构 |
CN1823323A (zh) * | 2003-07-15 | 2006-08-23 | 可递有限公司 | 用于执行本机绑定的方法和装置 |
US20100042981A1 (en) * | 2008-08-13 | 2010-02-18 | TransCella, Inc. | Software application performance enhancement |
CN102141929A (zh) * | 2010-10-21 | 2011-08-03 | 华为技术有限公司 | 应用程序的运行方法、模拟器、宿主机及*** |
-
2012
- 2012-03-26 CN CN201210082799.4A patent/CN103365668B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1823323A (zh) * | 2003-07-15 | 2006-08-23 | 可递有限公司 | 用于执行本机绑定的方法和装置 |
CN1731347A (zh) * | 2004-08-06 | 2006-02-08 | 梁肇新 | 基于Linux的Windows软件兼容层体系结构 |
US20100042981A1 (en) * | 2008-08-13 | 2010-02-18 | TransCella, Inc. | Software application performance enhancement |
CN102141929A (zh) * | 2010-10-21 | 2011-08-03 | 华为技术有限公司 | 应用程序的运行方法、模拟器、宿主机及*** |
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104021012B (zh) * | 2014-05-16 | 2018-05-01 | 可牛网络技术(北京)有限公司 | 应用程序的下载方法、执行异常的分析方法和装置 |
CN104021012A (zh) * | 2014-05-16 | 2014-09-03 | 可牛网络技术(北京)有限公司 | 应用程序的下载方法、执行异常的分析方法和装置 |
WO2017015856A1 (zh) * | 2015-07-28 | 2017-02-02 | 华为技术有限公司 | 一种调用操作***库的方法、装置及*** |
CN107615243B (zh) * | 2015-07-28 | 2019-12-13 | 华为技术有限公司 | 一种调用操作***库的方法、装置及*** |
CN107615243A (zh) * | 2015-07-28 | 2018-01-19 | 华为技术有限公司 | 一种调用操作***库的方法、装置及*** |
CN108469967A (zh) * | 2017-02-23 | 2018-08-31 | 银联数据服务有限公司 | 一种交易数据处理方法和交易*** |
CN106951270A (zh) * | 2017-04-06 | 2017-07-14 | 腾讯科技(深圳)有限公司 | 一种代码处理方法、***及服务器 |
CN106951270B (zh) * | 2017-04-06 | 2023-04-07 | 腾讯科技(深圳)有限公司 | 一种代码处理方法、***及服务器 |
CN106990993A (zh) * | 2017-04-18 | 2017-07-28 | 北京元心科技有限公司 | 多***的基础库文件加载方法及装置 |
CN106990993B (zh) * | 2017-04-18 | 2020-07-28 | 北京元心科技有限公司 | 多***的基础库文件加载方法及装置 |
CN108958824A (zh) * | 2017-05-18 | 2018-12-07 | 龙芯中科技术有限公司 | 应用程序的启动方法、装置、电子设备及存储介质 |
CN110378081A (zh) * | 2019-06-06 | 2019-10-25 | 厦门网宿有限公司 | 一种加壳动态链接库加载方法及装置 |
CN111240752A (zh) * | 2019-12-31 | 2020-06-05 | 北京元心科技有限公司 | 操作***自适配方法及*** |
CN113110890A (zh) * | 2021-04-20 | 2021-07-13 | 上海华东汽车信息技术有限公司 | 动态链接库调用方法、装置、计算机设备和存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN103365668B (zh) | 2017-12-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103365668A (zh) | 一种动态链接库装载和链接的方法、装置 | |
CN109446570B (zh) | 业务流程展示方法、装置、计算机设备以及存储介质 | |
CN103218428B (zh) | 一种动态链接方法及*** | |
CN107807839B (zh) | 一种修改虚拟机内存数据的方法、装置及电子设备 | |
CN101668283A (zh) | 一种手机嵌入式***中动态加载的方法 | |
CN102831069B (zh) | 内存处理方法、内存管理设备 | |
CN103530118A (zh) | 将自定义dll注入目标进程的方法及装置 | |
CN104267981A (zh) | 一种加载桌面上的应用布局的方法及装置 | |
CN101645020A (zh) | 虚拟操作***创建方法 | |
CN101739289B (zh) | 一种在Linux虚拟机中设置显示模式的方法及装置 | |
CN104731622B (zh) | 一种应用程序的加载方法、装置和移动终端 | |
CN107608609B (zh) | 一种事件对象发送方法与装置 | |
US10261918B2 (en) | Process running method and apparatus | |
CN102681893A (zh) | 可执行程序的跨平台实现方法及移动终端 | |
CN103530552A (zh) | Native API函数重构方法及装置 | |
CN102799461A (zh) | 一种应用的执行方法、装置及电子设备 | |
CN110716845A (zh) | 一种Android***的日志信息读取的方法 | |
CN104572431A (zh) | 一种测试方法及装置 | |
CN107544811B (zh) | IOS平台隐藏dylib文件的方法、存储介质、电子设备及*** | |
CN110659088B (zh) | 一种嵌入式环境下程序扩展的方法及*** | |
CN115390945A (zh) | 应用程序的运行方法、装置、电子设备及可读存储介质 | |
CN104063234A (zh) | 一种兼容方法及装置 | |
CN104205049A (zh) | 混合模拟和内核函数处理***和方法 | |
KR101284099B1 (ko) | 태스크들에 걸쳐 오퍼레이팅 시스템 서브-프로세스들 공유 | |
CN101236489B (zh) | 虚拟硬件***及其指令执行方法、以及虚拟机 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant |