CN109032605B - 一种应用运行方法和装置 - Google Patents
一种应用运行方法和装置 Download PDFInfo
- Publication number
- CN109032605B CN109032605B CN201810731167.3A CN201810731167A CN109032605B CN 109032605 B CN109032605 B CN 109032605B CN 201810731167 A CN201810731167 A CN 201810731167A CN 109032605 B CN109032605 B CN 109032605B
- Authority
- CN
- China
- Prior art keywords
- function
- link library
- dynamic link
- application
- library file
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/441—Register allocation; Assignment of physical memory space to logical memory space
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本申请提供了一种应用运行方法和装置,其中,该应用的程序包包括:二进制代码和以插件形式存在的动态链接库文件,该方法包括:在分配给该应用的第一内存中运行该二进制代码;在运行该二进制代码的过程中,如果检测到该二进制代码中存在待调用的外部函数的函数标识,依据该函数标识从该动态链接库文件中调用该外部函数;在为该动态链接库文件分配的第二内存中运行该外部函数。该方法和装置可以符合移动终端侧操作系统对应用限制的情况下,使得应用具备提供更多业务的可能。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及一种应用运行方法和装置。
背景技术
随着网络技术的不断发展,能够运行于移动终端中的应用的种类也日益增多,而且应用所能提供的业务功能也逐渐增多。
然而,受限于移动终端侧操作系统对于应用的限制,操作系统为每个应用分配的内存空间非常有限,从而限制了应用所能包含的代码量,进而使得应用提供的业务数量有限。
发明内容
有鉴于此,本申请提供了一种应用运行方法和装置,以在满足移动终端侧操作系统的限制的情况下,使得应用具备提供更多业务的可能。
为实现上述目的,一方面,本申请提供了一种应用运行方法,所述应用的程序包包括:二进制代码和以插件形式存在的动态链接库文件,所述方法包括:
在分配给所述应用的第一内存中运行所述二进制代码;
在运行所述二进制代码的过程中,如果检测到所述二进制代码中存在待调用的外部函数的函数标识,依据所述函数标识从所述动态链接库文件中调用所述外部函数;
在为所述动态链接库文件分配的第二内存中运行所述外部函数。
优选的,在运行所述二进制代码之前,还包括:
确定为所述应用分配的第一内存;
在所述第一内存中加载所述二进制代码。
优选的,所述如果检测到所述二进制代码中存在待调用的外部函数的函数标识,依据所述函数标识从所述动态链接库文件中调用所述外部函数,包括:
如果检测到所述二进制代码中存在待调用的外部函数的函数地址,依据所述函数地址从所述动态链接库文件中调用所述外部函数。
优选的,在所述依据所述函数标识从所述动态链接库文件中调用所述外部函数之前,还包括:
确定分配给所述动态链接库文件的第二内存;
在所述第二内存中加载所述动态链接库文件的文件头信息,所述文件头信息至少包括所述动态链接库文件中至少一个函数对应的函数地址。
优选的,所述外部函数的函数标识包括:所述外部函数的函数名称;
所述依据所述函数标识从所述动态链接库文件中调用所述外部函数,包括:
依据所述外部函数的函数名称,从所述第二内存加载的所述文件头信息中查询所述外部函数对应的函数地址;
依据所述外部函数对应的函数地址,从所述动态链接库文件的所述至少一个函数中,调用所述外部函数。
优选的,所述应用的程序包还包括:应用的目录,所述应用的目录至少包括:所述二进制代码对应的主目录,且在所述主目录中包含所述动态链接库文件对应的子目录。
另一方面,本申请还提供了一种应用运行装置,所述应用的程序包包括:二进制代码和以插件形式存在的动态链接库文件,所述装置包括:
代码运行单元,用于在分配给所述应用的第一内存中运行所述二进制代码;
动态加载单元,用于在运行所述二进制代码的过程中,如果检测到所述二进制代码中存在待调用的外部函数的函数标识,依据所述函数标识从所述动态链接库文件中调用所述外部函数;
动态运行单元,用于在为所述动态链接库文件分配的第二内存中运行所述外部函数。
优选的,所述装置还包括:
第一内存确定单元,用于在所述代码运行单元运行所述二进制代码之前,确定为所述应用分配的第一内存;
代码加载单元,用于在所述第一内存中加载所述二进制代码。
优选的,所述装置还包括:
第二内存确定单元,用于在所述动态加载单元依据所述函数标识从所述动态链接库文件中调用所述外部函数之前,确定分配给所述动态链接库文件的第二内存;
文件头加载单元,用于在所述第二内存中加载所述动态链接库文件的文件头信息,所述文件头信息至少包括所述动态链接库文件中至少一个函数对应的函数地址。
优选的,所述动态加载单元,包括:
地址查询子单元,用于在运行所述二进制代码的过程中,如果检测到所述二进制代码中存在待调用的外部函数的函数名称,依据所述外部函数的函数名称,从所述第二内存加载的所述文件头信息中查询所述外部函数对应的函数地址;
动态调用子单元,用于依据所述外部函数对应的函数地址,从所述动态链接库文件的所述至少一个函数中,调用所述外部函数。
由以上可知,在本申请实施例中,应用的程序包由二进制代码和以插件形式存在动态链接库文件构成。由于移动终端的操作系统在为应用分配用于运行二进制代码的第一内存的同时,还会为插件分配第二内存,这样,在应用的二进制代码在第一内存运行过程中,如果检测到二进制代码中待调用的外部函数的函数标识,则会依据该函数标识从动态链接库文件中调用该外部函数,并在第二内存中运行该外部函数,从而使得动态链接库文件中函数的运行不占用第一内存的空间,这样,将应用所需提供的部分业务的代码数据存储于动态链接库文件中,以减少二进制代码的数量,便可以减少运行二进制代码所需占用的第一内存,从而在移动终端的操作系统为应用分配较少的第一内存的前提下,也可以使得应用具备提供较多业务的可能。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1示出了本申请一种应用运行方法一个实施例的流程示意图;
图2示出了本申请一种应用运行方法又一个实施例的流程示意图;
图3示出了本申请一种应用运行装置一个实施例的组成结构示意图;
图4示出了本申请一种应用运行装置又一个实施例的组成结构示意图。
具体实施方式
本申请实施例的应用运行方法适用于移动终端,以在移动终端的操作系统对于应用存在限制的前提下,也可以使得提供多种业务的应用能够运行在移动终端中。
如,参见图1,其示出了本申请一种应用运行方法一个实施例的流程示意图,本实施例的方法可以应用于移动终端。
与常规的应用的程序包都是由二进制代码组成不同,在本申请中该应用的程序包除了包括二进制代码之外,还包括插件,该插件为该二进制代码关联的动态链接库文件。其中,动态链接库文件中可以包括该应用所能提供的至少一种业务对应的业务执行代码。如,根据实际需要将该应用所需涉及到的部分业务对应的程序仍以二进制代码的形式存在于程序包中,而基于该应用的其他部分业务对应的代码,构建出动态链接库文件,以便后续在应用运行中,动态加载该动态链接库文件中的代码。
具体的,本实施例的方法可以包括:
S101,在分配给该应用的第一内存中运行应用的二进制代码。
可以理解的是,在移动终端中安装了应用之后,在移动终端的操作系统运行该应用之前,为会应用分配内存,以运行应用中的二进制代码,为了便于区分,本申请实施例中将为应用分配的内存称为第一内存。
也就是说,该第一内存是移动终端等计算设备分配给应用,以加载并运行该应用的二进制代码的内存空间。相应的,在运行该应用之后,应用中的二进制代码会在分配的该第一内存中运行。
可选的,在移动终端的操作系统运行该应用之前,移动终端的操作系统会加载应用的二进制代码。其中,加载该二进制代码包括:确定为该应用的第一内存,该第一内存为用于运行应用中二进制代码的内存空间;在该第一内存中加载该应用的程序包中的二进制代码。
S102,在运行该二进制代码的过程中,如果检测到二进制代码中存在待调用的外部函数的函数标识,依据该函数标识从该动态链接库文件中调用该外部函数。
其中,动态链接库文件中包含执行至少一种业务所需的函数以及相关数据,而为了应用可以执行动态链接库文件中函数,以实现向外提供动态链接库文件对应的业务,在该二进制代码的不同位置处会包含动态链接库文件中待执行的函数的函数标识,以通过该函数标识定位该动态链接库文件中所需执行的函数。
由于动态链接库文件中的函数不属于二进制代码中的函数,因此,为了便于与二进制代码区分,将应用当前需要从动态链接库文件中调用的函数称为外部函数,并将二进制代码中用于指示从动态链接库文件中调用的函数的函数标识称为外部函数的函数标识。
其中,该外部函数的函数标识用于唯一的确定一个外部函数,如,该函数标识可以为用于标识外部函数在动态链接库文件中存储位置的函数地址;该函数标识还可以为该外部函数的函数名称、编号等唯一标识。
可以理解的是,考虑到应用所提供的业务的执行时机会有所不同,因此,在二进制代码的不同位置处均可能会动态触发执行该动态链接库文件中的函数,因此,在二进制代码执行过程中,该步骤S102可能会被多次执行,以在运行二进制代码的不同部分时,触发动态调用该动态链接库文件中的不同函数,从而实现向外提供动态链接库文件中所涉及到的业务。
S103,在为该动态链接库文件分配的第二内存中运行该外部函数。
可以理解的是,移动终端的操作系统会为应用程序中的插件单独分配一个内存空间,该内存空间不同于移动终端的操作系统为应用分配的用于运行二进制代码的内存空间。基于此,由于该插件为动态链接库文件,因此,移动终端的操作系统实际上会为该应用的程序包中的动态链接库文件单独分配一个内存空间。为了便于区分,将分配给动态链接库文件的内存空间称为第二内存空间。
其中,从该动态链接库文件中调用该外部函数可以理解为将该动态链接库文件中该外部函数从动态链接库文件中取出,并加载到移动终端的操作系统为该动态链接库文件分配的该第二内存中,以便实现动态加载该外部函数。
相应的,从动态链接库文件调用该外部函数之后,便可以在该第二内存中运行该外部函数,以使得应用通过运行该外部函数提供相应的业务。
可以理解的是,移动终端的操作系统运行该应用之前,还会为该动态链接库文件分配第二内存。可选的,在该步骤S102之前,移动终端的操作系统还可以确定分配给该动态链接库文件的第二内存,并在该第二内存中加载该动态链接库文件的文件头信息。该文件头信息至少包括该动态链接库文件中各个函数所对应的函数地址,以便基于该文件头信息定位从动态链接库文件中定位相应的函数。
如,该文件头信息中可以包括符号表,该符号表中可以包括动态链接库中所涉及到的各个函数的函数名称,以及各个函数名称所对应的函数的函数地址等。
当然,该文件头信息中还可以包括:动态链接库文件的名称、那么版本号等信息。
本申请的发明人经研究发现:移动终端的操作系统对于应用的限制主要是限制应用的代码量,而本质是限制分配给应用的内存大小。如果应用的程序包中所有代码都是二进制代码形式存在,则移动终端的操作系统需要分配较大的内存空间给该应用,才可以保证应用的所有二进制代码都可以被加载并运行,这必然会超过移动终端的操作系统对于分配给应用的内存空间的限制量。然而,如果为了满足移动终端的操作系统对于分配给应用的内存空间的限制,则必然会缩减应用所能提供的业务,以减少应用所包含的代码量,进而减少应用所需占据的内存空间。
而发明人进一步研究发现:由于目前移动终端的操作系统会针对应用的插件单独分配内存,因此,如果将应用中的部分业务所涉及到的数据拆分到以插件形式存在的动态链接库文件中,并在需要执行相应业务时,动态加载动态链接库文件中的函数。这样,由于动态链接库文件中函数等数据是在分配给应用的内存空间之外的独立内存空间运行的,使得动态链接库文件中的函数独立于应用的二进制代码运行的,即使移动终端的操作系统分配给应用的内存空间有限,也不会影响到动态链接库文件中函数的运行,从而可以保证应用可以借助于动态链接库文件增加其所能提供的业务的数量及种类。
同时,对于一些应用发布平台也可能会对发布的应用有限制,限制的具体内容与移动终端的操作系统对于应用的限制相同,相应的,对于应用发布平台的服务器而言,服务器需要检测运行所需发布的应用之后,需要给该应用分配的第一内存的大小,以保证应用可以满足移动终端的操作系统的相关限制。而由于本申请的应用中动态链接库文件在独立于应用对应的内存之外的内存中运行,因此,通过本申请的方案,可以在仅需为应用分配较少内存的前提下,就可以保证应用运行,从而可以使得基于本申请的方案所生成以及运行的应用可以满足服务器的发布限制。
由以上可知,在本申请实施例中,应用的程序包由二进制代码和动态链接库文件构成。由于移动终端的操作系统在为应用分配用于运行二进制代码的第一内存的同时,还会为以插件形式存在的动态链接库文件分配第二内存,这样,在应用的二进制代码在第一内存运行过程中,如果检测到二进制代码中待调用的外部函数的函数标识,则会依据该函数标识从动态链接库文件中调用该外部函数,并在第二内存中运行该外部函数,从而使得动态链接库文件中函数的运行不占用第一内存的空间,这样,将应用所需提供的部分业务的代码数据存储于动态链接库文件中,以减少二进制代码的数量,便可以减少运行二进制代码所需占用的第一内存,从而在移动终端的操作系统为应用分配较少的第一内存的前提下,也可以使得应用具备提供较多业务的可能。
可以理解的是,应用的程序包中除了包括二进制代码和动态链接库文件之外,还会包括该应用的目录。该应用的目录包括二进制代码、动态链接库文件中所涉及到的各个函数的地址目录。可选的,为了体现出该动态链接库文件是以插件形式存在于该应用的程序包中,以保证后续移动终端可以为以插件形式存在的该动态链接库文件分配独立的内存空间,,该应用的目录中可以包括二进制代码对应的主目录,且在该主目录中包括该动态链接库文件对应的子目录。
为了便于理解,参见图2,其示出了本申请一种应用运行方法又一个实施例的流程示意图,本实施例的方法同样可以应用于移动终端的操作系统,如,手机,掌上电脑等移动终端的操作系统,本申请的应用的程序包中包括:二进制代码以及以插件形式存在的动态链接库文件。
本实施例的方法可以包括:
S201,确定为应用分配的第一内存。
S202,在该第一内存中加载应用的程序包中的二进制代码。
可以理解的是,移动终端的操作系统可以根据应用中二进制代码的数据量,为应用分配第一内存。由于本申请实施例中应用程序包的二进制代码仅仅是应用所能提供的部分业务的代码数据,因此,相对于应用程序包中的二进制代码是所有业务的代码数据而言,本申请实施例中二进制代码的数据量相对较少,从而使得需要分配的第一内存的内存空间大小较小,从而减少所需的第一内存的内存空间大小超出操作系统所能分配给应用的内存空间的最大值的情况。
S203,确定分配给该动态链接库文件的第二内存。
该步骤S203实际上是移动终端的操作系统确定分配给插件的第二内存,而由于该应用程序包中的插件为该动态链接库文件,因此,也就是确定分配给以插件形式存在的动态链接库文件的第二内存。
其中,该第二内存不同于第一内存。
S204,在该第二内存中加载该动态链接库文件的文件头信息。
其中,该文件头信息至少包括该动态链接库文件中各个函数对应的函数地址。该文件头信息还可以包括动态链接库文件的名称、版本号等数据。
其中,该步骤S203和步骤S204为运行该应用之前,操作系统对于动态链接库文件的预加载过程。在实际应用中,无法每次运行应用都执行该步骤S203和步骤S204,仅仅可以在首次运行该应用时,执行这两个步骤。因此,在该步骤S203之前,还可以检测是否为该动态链接库文件分配了第二内存,如未分配,则执行该步骤S203和S204。
S205,在该第一内存中运行应用的二进制代码。
S206,在运行该二进制代码的过程中,如果检测到该二进制代码中存在待调用的外部函数的函数信息,则分析该外部函数的函数信息是否属于外部函数的函数地址,如果是,则执行步骤S208;如果否,则执行步骤S207;
其中,该外部函数的函数信息可以为外部函数的名称、外部函数的函数地址等等。
可以理解的是,如果该外部函数的函数信息为该外部函数的函数地址,则操作系统可以直接依据该函数地址加载动态链接库文件中相应的函数;如果该外部函数的函数信息不是该外部函数的函数地址,则需要先确定该外部函数的函数地址。
S207,依据该外部函数的函数信息,从该第二内存中加载的该文件头信息中查询该外部函数对应的函数地址,并执行步骤S208。
如,依据外部函数的函数编号,从该第二内存中加载的文件头信息中查询该外部函数在外部链接库文件中对应的函数地址。
S208,依据该函数地址从该动态链接库文件中调用该外部函数,以将该外部函数加载到该第二内存中。
在确定出外部函数的函数地址之后,可以从动态链接库文件的多个函数中确定该外部函数,然后,调用该外部函数并加载到第二内存中,从而实现了在需要执行动态链接库文件中的函数时,才动态加载相应的函数并执行。
S209,在该第二内存中运行该外部函数。
与前面实施例相似,在运行该二进制代码的过程中,以上步骤S206到S209可能会被多次触发执行,以动态执行动态链接库文件中的相应函数,使得应用可以提供动态链接库文件中相应函数所对应的业务。
另一方面,对应本申请的一种应用运行方法,本申请还提供了一种应用运行装置。
如,参见图3,其示出了本申请一种应用运行装置一个实施例的组成结构示意图,其中,该应用的程序包包括:二进制代码和以插件形式存在的动态链接库文件,所述装置包括:代码运行单元301,动态加载单元302和动态运行单元303。
其中,代码运行单元301,用于在分配给所述应用的第一内存中运行所述二进制代码;
动态加载单元302,用于在运行所述二进制代码的过程中,如果检测到所述二进制代码中存在待调用的外部函数的函数标识,依据所述函数标识从所述动态链接库文件中调用所述外部函数;
动态运行单元303,用于在为所述动态链接库文件分配的第二内存中运行所述外部函数。
在一种可能的实现方式中,所述动态加载单元,具体为,用于在运行所述二进制代码的过程中,如果检测到所述二进制代码中存在待调用的外部函数的函数地址,依据所述函数地址从所述动态链接库文件中调用所述外部函数。
在一种可能的实现方式中,该应用的程序包还包括:应用的目录,所述应用的目录至少包括:所述二进制代码对应的主目录,且在所述主目录中包含所述动态链接库文件对应的子目录。
如图4,其示出了本申请一种应用运行装置又一个实施例的组成结构示意图,本实施例的装置与图3实施例所示的装置的不同之处在于:
该装置除了包括代码运行单元301,动态加载单元302和动态运行单元303之外,还可以包括:
第一内存确定单元304,用于在所述代码运行单元301运行所述二进制代码之前,确定为所述应用分配的第一内存;
代码加载单元305,用于在所述第一内存中加载所述二进制代码。
可选的,该装置还包括:
第二内存确定单元306,用于在所述动态加载单元依据所述函数标识从所述动态链接库文件中调用所述外部函数之前,确定分配给所述动态链接库文件的第二内存;
文件头加载单元307,用于在所述第二内存中加载所述动态链接库文件的文件头信息,所述文件头信息至少包括所述动态链接库文件中至少一个函数对应的函数地址。
在一种可能的实现方式中,所述动态加载单元,可以包括:
地址查询子单元,用于在运行所述二进制代码的过程中,如果检测到所述二进制代码中存在待调用的外部函数的函数名称,依据所述外部函数的函数名称,从所述第二内存加载的所述文件头信息中查询所述外部函数对应的函数地址;
动态调用子单元,用于依据所述外部函数对应的函数地址,从所述动态链接库文件的所述至少一个函数中,调用所述外部函数。
需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置类实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、物品或者设备中还存在另外的相同要素。
对所公开的实施例的上述说明,使本领域技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
以上仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (8)
1.一种应用运行方法,其特征在于,所述应用的程序包包括:二进制代码和以插件形式存在的动态链接库文件,所述应用涉及的部分业务对应的程序以二进制代码的形式存在于程序包中,所述应用的其他部分业务对应的代码以动态链接库文件的形式存在,所述应用的程序包还包括:应用的目录,所述应用的目录至少包括:所述二进制代码对应的主目录,且在所述主目录中包含所述动态链接库文件对应的子目录,所述方法包括:
在分配给所述应用的第一内存中运行所述二进制代码;
在运行所述二进制代码的过程中,如果检测到所述二进制代码中存在待调用的外部函数的函数标识,依据所述函数标识从所述动态链接库文件中调用所述外部函数,并加载到为所述动态链接库文件分配的第二内存中;
在为所述动态链接库文件分配的第二内存中运行所述外部函数,所述第二内存独立于所述第一内存之外;
其中,所述如果检测到所述二进制代码中存在待调用的外部函数的函数标识,依据所述函数标识从所述动态链接库文件中调用所述外部函数,包括:
如果检测到所述二进制代码中存在待调用的外部函数的函数地址,依据所述函数地址从所述动态链接库文件中调用所述外部函数。
2.根据权利要求1所述的应用运行方法,其特征在于,在运行所述二进制代码之前,还包括:
确定为所述应用分配的第一内存;
在所述第一内存中加载所述二进制代码。
3.根据权利要求1或2所述的应用运行方法,其特征在于,在所述依据所述函数标识从所述动态链接库文件中调用所述外部函数之前,还包括:
确定分配给所述动态链接库文件的第二内存;
在所述第二内存中加载所述动态链接库文件的文件头信息,所述文件头信息至少包括所述动态链接库文件中至少一个函数对应的函数地址。
4.根据权利要求3所述的应用运行方法,其特征在于,所述外部函数的函数标识包括:所述外部函数的函数名称;
所述依据所述函数标识从所述动态链接库文件中调用所述外部函数,包括:
依据所述外部函数的函数名称,从所述第二内存加载的所述文件头信息中查询所述外部函数对应的函数地址;
依据所述外部函数对应的函数地址,从所述动态链接库文件的所述至少一个函数中,调用所述外部函数。
5.一种应用运行装置,其特征在于,所述应用的程序包包括:二进制代码和以插件形式存在的动态链接库文件,所述应用涉及的部分业务对应的程序以二进制代码的形式存在于程序包中,所述应用的其他部分业务对应的代码以动态链接库文件的形式存在,所述应用的程序包还包括:应用的目录,所述应用的目录至少包括:所述二进制代码对应的主目录,且在所述主目录中包含所述动态链接库文件对应的子目录,所述装置包括:
代码运行单元,用于在分配给所述应用的第一内存中运行所述二进制代码;
动态加载单元,用于在运行所述二进制代码的过程中,如果检测到所述二进制代码中存在待调用的外部函数的函数标识,依据所述函数标识从所述动态链接库文件中调用所述外部函数,并加载到为所述动态链接库文件分配的第二内存中;
动态运行单元,用于在为所述动态链接库文件分配的第二内存中运行所述外部函数,所述第二内存独立于所述第一内存之外;
其中,所述如果检测到所述二进制代码中存在待调用的外部函数的函数标识,依据所述函数标识从所述动态链接库文件中调用所述外部函数,包括:
如果检测到所述二进制代码中存在待调用的外部函数的函数地址,依据所述函数地址从所述动态链接库文件中调用所述外部函数。
6.根据权利要求5所述的应用运行装置,其特征在于,还包括:
第一内存确定单元,用于在所述代码运行单元运行所述二进制代码之前,确定为所述应用分配的第一内存;
代码加载单元,用于在所述第一内存中加载所述二进制代码。
7.根据权利要求5或6所述的应用运行装置,其特征在于,还包括:
第二内存确定单元,用于在所述动态加载单元依据所述函数标识从所述动态链接库文件中调用所述外部函数之前,确定分配给所述动态链接库文件的第二内存;
文件头加载单元,用于在所述第二内存中加载所述动态链接库文件的文件头信息,所述文件头信息至少包括所述动态链接库文件中至少一个函数对应的函数地址。
8.根据权利要求7所述的应用运行装置,其特征在于,所述动态加载单元,包括:
地址查询子单元,用于在运行所述二进制代码的过程中,如果检测到所述二进制代码中存在待调用的外部函数的函数名称,依据所述外部函数的函数名称,从所述第二内存加载的所述文件头信息中查询所述外部函数对应的函数地址;
动态调用子单元,用于依据所述外部函数对应的函数地址,从所述动态链接库文件的所述至少一个函数中,调用所述外部函数。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810731167.3A CN109032605B (zh) | 2018-07-05 | 2018-07-05 | 一种应用运行方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810731167.3A CN109032605B (zh) | 2018-07-05 | 2018-07-05 | 一种应用运行方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109032605A CN109032605A (zh) | 2018-12-18 |
CN109032605B true CN109032605B (zh) | 2022-09-20 |
Family
ID=64640326
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810731167.3A Active CN109032605B (zh) | 2018-07-05 | 2018-07-05 | 一种应用运行方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109032605B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110096338B (zh) * | 2019-05-10 | 2021-12-14 | 百度在线网络技术(北京)有限公司 | 智能合约执行方法、装置、设备及介质 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7765579B2 (en) * | 2004-09-07 | 2010-07-27 | Greencastle Technology, Inc. | Security deployment system |
CN100552628C (zh) * | 2005-09-02 | 2009-10-21 | 腾讯科技(深圳)有限公司 | 在无线二进制运行环境平台实现动态链接库方法 |
CN101908119B (zh) * | 2010-08-12 | 2012-10-03 | 浙江中控软件技术有限公司 | 一种动态链接库dll文件的处理方法和装置 |
CN107766096A (zh) * | 2016-08-19 | 2018-03-06 | 阿里巴巴集团控股有限公司 | 应用程序安装包的生成方法、应用程序的运行方法及装置 |
CN106502745B (zh) * | 2016-10-26 | 2019-12-10 | 腾讯科技(深圳)有限公司 | 一种函数调用方法和装置 |
CN106648749B (zh) * | 2016-11-11 | 2019-12-31 | 广州华多网络科技有限公司 | 一种可执行程序动态调用方法及系统 |
CN107291480B (zh) * | 2017-08-15 | 2020-12-15 | 中国农业银行股份有限公司 | 一种函数调用方法及装置 |
-
2018
- 2018-07-05 CN CN201810731167.3A patent/CN109032605B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN109032605A (zh) | 2018-12-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5139987B2 (ja) | 拡張可能メタデータ | |
TWI640923B (zh) | Application processing method and device | |
US8918776B2 (en) | Self-adapting software system | |
CN110308999B (zh) | 一种应用间动态共享依赖包的方法、存储介质及移动终端 | |
CN112308716B (zh) | 区块链智能合约执行方法、装置、设备及计算机存储介质 | |
CN101833464A (zh) | 一种移动终端分段加载应用程序的方法及装置 | |
CN102968321B (zh) | 应用程序安装装置和应用程序安装方法 | |
CN109032605B (zh) | 一种应用运行方法和装置 | |
CN109508304B (zh) | 一种内存管理元数据的处理方法及装置 | |
CN110750336A (zh) | 一种OpenStack虚拟机内存热扩容方法 | |
CN110457925B (zh) | 内外部存储中应用数据隔离方法、装置、终端及存储介质 | |
CN113114515B (zh) | 一种资源文件配置方法及装置 | |
US20080140979A1 (en) | Method of allocating stack in multi-threaded sensor operating system environment | |
JP5458147B2 (ja) | イベント通知方法、プログラム、および装置 | |
JP5684633B2 (ja) | メモリ管理装置、メモリ管理方法及びメモリ管理プログラム | |
CN111885184A (zh) | 高并发场景下热点访问关键字处理方法和装置 | |
CN114217908B (zh) | 容器启动方法、系统、装置及设备 | |
CN108170491B (zh) | App动态链接库的配置方法、终端及计算机可读存储介质 | |
CN111026613B (zh) | 日志处理方法及装置 | |
US20100299672A1 (en) | Memory management device, computer system, and memory management method | |
CN116991491A (zh) | 程序插件加载方法、装置、计算机设备及计算机程序 | |
US20080281887A1 (en) | Application specific garbage collection system | |
KR101140522B1 (ko) | 객체 관리 시스템 및 방법 | |
CN109408547B (zh) | 一种sam注册表的读取方法、读取系统及相关装置 | |
CN116755845B (zh) | 数据处理方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |