控制方法和电子设备的制作方法

文档序号:6486355阅读:98来源:国知局
控制方法和电子设备的制作方法
【专利摘要】提供了控制方法和电子设备。该控制方法应用于控制加载器对程序的加载,其中,程序包括多个函数,该控制方法包括:在加载器加载程序之前,创建一函数重定位表,其中,该函数重定位表包括多个函数中的要重定位的一个或多个函数及其自定义地址;以及,加载器根据该函数重定位表加载程序,以将要重定位的一个或多个函数加载到其自定义地址。通过根据本发明实施例的控制方法和电子设备,实现了加载器加载程序的过程中对函数的重定位地址的精确控制,从而改进了系统的性能。
【专利说明】控制方法和电子设备
【技术领域】
[0001 ] 本发明涉及控制方法和电子设备。
【背景技术】
[0002]在当前的电子设备中,操作系统会使用加载器来对程序或动态库进行加载,并且在加载器加载程序或者动态库时,加载器会对程序或者动态库进行重定位。
[0003]通常,程序或者动态库的执行会涉及到一个或多个依赖库,并且,在程序或者动态库被执行时,加载器会加载所有的依赖库,并对这些依赖库进行重定位。
[0004]在现有技术中,每个函数通常包括多个函数,从广义上来看,动态库和依赖库也可以被看作为程序,且在这些库中包括多个函数。
[0005]这样,当在操作系统中,加载器加载程序时,对于程序中所包括的函数的重定位在很大程度上是不可控制的,这就造成了不易定位程序中的函数的问题。

【发明内容】

[0006]因此,针对上述现有技术中存在的问题和需求做出本发明。
[0007]本发明实施例提供了一种控制方法和电子设备,其能够精确地控制加载器加载程序过程中对函数的重定位的地址,从而改进系统的性能。
[0008]根据本发明实施例的一个方面,提供了一种控制方法,应用于控制加载器对程序的加载,其中,所述程序包括多个函数,所述控制方法包括:在所述加载器加载所述程序之前,创建一函数重定位表,其中,所述函数重定位表包括所述多个函数中的要重定位的一个或多个函数及其自定义地址;以及,所述加载器根据所述函数重定位表加载所述程序,以将所述要重定位的一个或多个函数加载到其自定义地址。
[0009]在上述控制方法中,所述程序是动态库,且包括一个或多个依赖库。
[0010]在上述控制方法中,所述要重定位的一个或多个函数的自定义地址是新的函数地址;以及,将所述要重定位的一个或多个函数加载到新的函数地址对应于执行与所述新的函数地址对应的新的函数。
[0011]在上述控制方法中,所述要重定位的一个或多个函数的自定义地址是异常的内存地址;以及,将所述要重定位的一个或多个函数加载到异常的内存地址对应于捕获所述要重定位的一个或多个函数的异常。
[0012]在上述控制方法中,所述异常的内存地址是无权限的内存地址。
[0013]在上述控制方法中,所述加载器在虚拟化系统中加载所述程序;以及,所述控制方法进一步包括:在捕获到要重定位的一个或多个函数的异常之后,将所述一个或多个函数的执行从虚拟化系统的虚拟化端切换到主机端。
[0014]根据本发明实施例的另一方面,提供了一种电子设备,包括:加载器,配置为在所述电子设备的操作系统下对程序进行加载,所述程序包括多个函数;以及,表创建单元,配置为在所述加载器加载所述程序之前,创建一函数重定位表,所述函数重定位表包括所述多个函数中的要重定位的一个或多个函数及其自定义地址;其中,所述加载器根据由所述表创建单元创建的函数重定位表加载所述程序,以将所述要重定位的一个或多个函数加载到其自定义地址。
[0015]在上述电子设备中,所述程序是动态库,且包括一个或多个依赖库。
[0016]在上述电子设备中,所述要重定位的一个或多个函数的自定义地址是新的函数地址;以及,所述加载器将所述要重定位的一个或多个函数加载到新的函数地址对应于执行与所述新的函数地址对应的新的函数。
[0017]在上述电子设备中,所述要重定位的一个或多个函数的自定义地址是异常的内存地址;以及,所述加载器将所述要重定位的一个或多个函数加载到异常的内存地址对应于捕获所述要重定位的一个或多个函数的异常。
[0018]在上述电子设备中,所述异常的内存地址是无权限的内存地址。
[0019]在上述电子设备中,所述加载器在所述操作系统的虚拟化系统下加载所述程序;以及,所述电子设备进一步包括:切换单元,配置为在所述加载器捕获到要重定位的一个或多个函数的异常之后,将所述一个或多个函数的执行从所述虚拟化系统的虚拟化端切换到主机端。
[0020]通过根据本发明实施例的控制方法和电子设备,实现了加载器加载程序的过程中对函数的重定位地址的精确控制,从而改进了系统的性能。
【专利附图】

【附图说明】
[0021]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0022]图1是示出根据本发明实施例的控制方法的示意性流程图;
[0023]图2是示出根据本发明实施例的电子设备的示意性框图。
【具体实施方式】
[0024]下面,将结合附图详细描述根据本发明实施例的控制方法和电子设备。
[0025]根据本发明实施例的一个方面,提供了一种控制方法,应用于控制加载器对程序的加载,其中,所述程序包括多个函数,所述控制方法包括:在所述加载器加载所述程序之前,创建一函数重定位表,其中,所述函数重定位表包括所述多个函数中的要重定位的一个或多个函数及其自定义地址;以及,所述加载器根据所述函数重定位表加载所述程序,以将所述要重定位的一个或多个函数加载到其自定义地址。
[0026]通过根据本发明实施例的控制方法,可以在加载器加载程序时定位程序中的每个函数,从而实现程序中的函数的精确定位,这可以解决程序中的函数不易定位所产生的一些问题,具体将在下文中进行描述。
[0027]图1是示出根据本发明实施例的控制方法的示意性流程图。如图1所示,根据本发明实施例的控制方法应用于控制加载器对程序的加载,其中,程序包括多个函数,该控制方法包括:SI,在加载器加载程序之前,创建一函数重定位表,其中,该函数重定位表包括多个函数中的要重定位的一个或多个函数及其自定义地址;以及,S2,加载器根据函数重定位表来加载程序,以将要重定位的一个或多个函数加载到其自定义地址。
[0028]在本发明实施例的控制方法中,所述程序是动态库,且包括一个或多个依赖库。
[0029]动态库又称为动态链接库(DLL:Dynamic Link Library),其是一个包含可由多个程序同时使用的代码和数据的库,而不是可执行文件。动态链接提供了一种方法,使进程可以调用不属于其可执行代码的函数,其中,函数的可执行代码位于一个动态库中,该动态库包含一个或多个已被编译、链接并与使用它们的进程分开存储的函数。动态库还有助于共享数据和资源,多个应用程序可同时访问内存中单个动态库副本的内容。
[0030]如上所述,动态库和依赖库都可以看作是程序,并且在其中包括多个函数,在加载器加载动态库和依赖库时,同样也会对于其中的函数进行重定位。由于这种重定位在很大程度上是无法由操作系统控制的,因此无法精确地控制函数在重定位之后的地址,而在某些应用环境下,可能又需要能够定位库中的函数,这就造成了一些不便。
[0031]在本发明实施例的控制方法中,所述要重定位的一个或多个函数的自定义地址是新的函数地址;以及,将所述要重定位的一个或多个函数加载到新的函数地址对应于执行与所述新的函数地址对应的新的函数。
[0032]如上所述,如果将库中包含的函数定位到新的函数地址,那么加载器对于库中的函数的加载就对应于执行与该新的函数地址对应的函数,这实际上可以定义对库中的函数的执行,从而实现用户期望的功能。因为在物理内存中,与新的函数对应的函数地址是已知的,通过根据本发明实施例的控制方法将由加载器加载的函数重定位到该新的函数地址,就可以执行该新的函数所具有的功能,这在很大程度上提高了操作系统的功能性,从而增强了系统的性能。
[0033]在本发明实施例的控制方法中,所述要重定位的一个或多个函数的自定义地址是异常的内存地址;以及,将所述要重定位的一个或多个函数加载到异常的内存地址对应于捕获所述要重定位的一个或多个函数的异常。
[0034]在本发明实施例的控制方法中,所述异常的内存地址是无权限的内存地址。
[0035]在本发明实施例的控制方法中,所述加载器在虚拟化系统中加载所述程序;以及,所述控制方法进一步包括:在捕获到要重定位的一个或多个函数的异常之后,将所述一个或多个函数的执行从虚拟化系统的虚拟化端切换到主机端。
[0036]在操作系统中,有时需要刻意捕获重定位的函数的异常,以便执行一些用户特定的操作,例如,通过捕获函数的异常,当加载器在虚拟化系统中加载程序时,可以使得该函数的执行从虚拟化系统的虚拟化端切换到主机端。在当前操作系统中,主机端通常具有比虚拟化端更强的处理性能。例如,以图像处理为例,主机端可以使用图形处理芯片来进行硬件加速,来虚拟化端则仅能够使用图形处理软件来进行软件加速,这样,对于图像处理来说,显然在主机端可以实现更加优越的处理性能。因此,对于某些函数来说,可能其执行需要更强的处理性能,这就需要将该函数的执行从虚拟化系统中的虚拟化端切换到主机端进行执行。但是,在一般情况下,由于无法捕获到这种需要切换处理的函数,无法进行上述切换,而通过根据本发明实施例的控制方法,通过将加载器加载的函数重定位到异常的内存地址,则可以捕获到重定位之后的函数的异常,使得切换函数的执行成为可能。
[0037]在上述情况下,异常的内存地址可以是用户在实际的物理地址中预先指定的一段内存地址,并且该段内存地址可由操作系统识别出来。例如,这里该段内存地址可以是无权限的内存地址,例如,无读权限或者无写权限,或者无读写权限,这样,当函数被重定位到这段物理地址时,操作系统就将检测到异常。比如,如果该段物理地址无写权限,那么加载器加载的函数将无法被写到该段物理内存,从而操作系统识别出异常。又或者,该段物理内存地址可以具有相应的标识,以由操作系统或者用户识别出来。这里,本领域技术人员可以理解,在根据本发明实施例的控制方法中,异常的内存地址并不一定意味着这段内存地址具有错误,而是用于捕获重定位到这段内存地址的函数,因此,仅需要可以由操作系统或者用户通过某些标识来识别出重定位到这些地址的函数即可。
[0038]如上所述,在加载器加载程序的过程中,可能需要将程序中的某些函数重定位到精确的自定义地址来实现系统的一些增强型的功能。这里,本领域技术人员可以理解,将哪些函数重定位到自定义的地址是根据系统的具体需求来设定的,并不需要对无特别用途的函数进行精确的定位。因此,在根据本发明实施例的控制方法中,所创建的函数重定位表中仅包括程序中包含的所有函数中需要进行重定位的函数以及需要将这些函数定位到的自定义地址,例如,上述需要作为新的函数执行的函数或者需要捕获到其异常的函数。这里,该创建的函数重定位表是以加载器可读的格式创建的,从而当加载器加载程序时,可依据该函数重定位表将需要的函数加载到表中具体限定的自定义地址处。
[0039]根据本发明实施例的另一方面,提供了一种电子设备,包括:加载器,配置为在所述电子设备的操作系统下对程序进行加载,所述程序包括多个函数;以及,表创建单元,配置为在所述加载器加载所述程序之前,创建一函数重定位表,所述函数重定位表包括所述多个函数中的要重定位的一个或多个函数及其自定义地址;其中,所述加载器根据由所述表创建单元创建的函数重定位表加载所述程序,以将所述要重定位的一个或多个函数加载到其自定义地址。
[0040]图2是示出根据本发明实施例的电子设备的示意性框图。如图2所示,电子设备100包括:加载器101,配置为在电子设备100的操作系统下对程序进行加载,该程序包括多个函数;以及,表创建单元102,配置为在加载器101加载程序之前,创建一函数重定位表,该函数重定位表包括该多个函数中的要重定位的一个或多个函数及其自定义地址;其中,加载器101根据由表创建单元102创建的函数重定位表加载程序,以将要重定位的一个或多个函数加载到其自定义地址。
[0041 ] 在上述电子设备中,所述程序是动态库,且包括一个或多个依赖库。
[0042]在上述电子设备中,所述要重定位的一个或多个函数的自定义地址是新的函数地址;以及,所述加载器将所述要重定位的一个或多个函数加载到新的函数地址对应于执行与所述新的函数地址对应的新的函数。
[0043]在上述电子设备中,所述要重定位的一个或多个函数的自定义地址是异常的内存地址;以及,所述加载器将所述要重定位的一个或多个函数加载到异常的内存地址对应于捕获所述要重定位的一个或多个函数的异常。
[0044]在上述电子设备中,所述异常的内存地址是无权限的内存地址。
[0045]在上述电子设备中,所述加载器在所述操作系统的虚拟化系统下加载所述程序;以及,所述电子设备进一步包括:切换单元,配置为在所述加载器捕获到要重定位的一个或多个函数的异常之后,将所述一个或多个函数的执行从所述虚拟化系统的虚拟化端切换到主机端。
[0046]这里,根据本发明实施例的电子设备的其它细节与之前关于根据本发明实施例的控制方法所做的描述中的细节相同,因此为了避免重复将不再赘述。本领域技术人员可以理解,上述电子设备可以是具有以加载器来加载程序的操作系统的任意电子设备,而不限于计算机系统。
[0047]并且,虽然在以上描述中,主要以库函数为例进行了描述,但是本领域技术人员可以理解,根据本发明实施例的控制方法和电子设备可以应用于加载器对任意程序的加载,以增强系统性能,本发明实施例并不意在对此进行任意限制。
[0048]通过根据本发明实施例的控制方法和电子设备,实现了加载器加载程序的过程中对函数的重定位地址的精确控制,从而改进了系统的性能。
[0049]本发明已经参考具体实施例进行了详细说明。然而,很明显,在不背离本发明的精神的情况下,本领域技术人员能够对实施例执行更改和替换。换句话说,本发明用说明的形式公开,而不是被限制地解释。要判断本发明的要旨,应该考虑所附的权利要求。
【权利要求】
1.一种控制方法,应用于控制加载器对程序的加载,其中,所述程序包括多个函数,所述控制方法包括: 在所述加载器加载所述程序之前,创建一函数重定位表,其中,所述函数重定位表包括所述多个函数中的要重定位的一个或多个函数及其自定义地址;以及 所述加载器根据所述函数重定位表加载所述程序,以将所述要重定位的一个或多个函数加载到其自定义地址。
2.如权利要求1所述的控制方法,其中,所述程序是动态库,且包括一个或多个依赖库。
3.如权利要求1所述的控制方法,其中,所述要重定位的一个或多个函数的自定义地址是新的函数地址;以及 将所述要重定位的一个或多个函数加载到新的函数地址对应于执行与所述新的函数地址对应的新的函数。
4.如权利要求1所述的控制方法,其中,所述要重定位的一个或多个函数的自定义地址是异常的内存地址;以及 将所述要重定位的一个或多个函数加载到异常的内存地址对应于捕获所述要重定位的一个或多个函数的异常。
5.如权利要求4所述的控制方法,其中,所述异常的内存地址是无权限的内存地址。
6.如权利要求4所述的控制方法,其`中,所述加载器在虚拟化系统中加载所述程序;以及 所述控制方法进一步包括: 在捕获到要重定位的一个或多个函数的异常之后,将所述一个或多个函数的执行从虚拟化系统的虚拟化端切换到主机端。
7.—种电子设备,包括: 加载器,配置为在所述电子设备的操作系统下对程序进行加载,所述程序包括多个函数;以及 表创建单元,配置为在所述加载器加载所述程序之前,创建一函数重定位表,所述函数重定位表包括所述多个函数中的要重定位的一个或多个函数及其自定义地址; 其中,所述加载器根据由所述表创建单元创建的函数重定位表加载所述程序,以将所述要重定位的一个或多个函数加载到其自定义地址。
8.如权利要求7所述的电子设备,其中,所述程序是动态库,且包括一个或多个依赖库。
9.如权利要求7所述的电子设备,其中,所述要重定位的一个或多个函数的自定义地址是新的函数地址;以及 所述加载器将所述要重定位的一个或多个函数加载到新的函数地址对应于执行与所述新的函数地址对应的新的函数。
10.如权利要求7所述的电子设备,其中,所述要重定位的一个或多个函数的自定义地址是异常的内存地址;以及 所述加载器将所述要重定位的一个或多个函数加载到异常的内存地址对应于捕获所述要重定位的一个或多个函数的异常。
11.如权利要求10所述的电子设备,其中,所述异常的内存地址是无权限的内存地址。
12.如权利要求10所述的电子设备,其中,所述加载器在所述操作系统的虚拟化系统下加载所述程序;以及 所述电子设备进一步包括: 切换单元,配置为在所述加载器捕获到要重定位的一个或多个函数的异常之后,将所述一个或多个函数的执行从所 述虚拟化系统的虚拟化端切换到主机端。
【文档编号】G06F9/445GK103513995SQ201210206420
【公开日】2014年1月15日 申请日期:2012年6月18日 优先权日:2012年6月18日
【发明者】黄绍华, 郭琦, 陆见微 申请人:联想(北京)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1