CN103309684A - 动态加载应用的方法及装置 - Google Patents
动态加载应用的方法及装置 Download PDFInfo
- Publication number
- CN103309684A CN103309684A CN2012100584456A CN201210058445A CN103309684A CN 103309684 A CN103309684 A CN 103309684A CN 2012100584456 A CN2012100584456 A CN 2012100584456A CN 201210058445 A CN201210058445 A CN 201210058445A CN 103309684 A CN103309684 A CN 103309684A
- Authority
- CN
- China
- Prior art keywords
- image file
- binary image
- loaded
- address
- application
- 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.)
- Pending
Links
Images
Abstract
本发明公开了一种动态加载应用的方法及装置,属于通信技术领域。所述方法包括:将待加载应用编译成系统可执行的二进制映像文件,所述二进制映像文件中的函数地址为与位置无关的相对地址;根据预先为所述待加载应用预留的入口,从所述二进制映像文件中选择位于所述二进制映像文件起始位置的指定函数,所述指定函数的地址为相对于所述入口的绝对地址;根据所述指定函数的地址将所述二进制映像文件加载至内存空间。所述装置包括:编译模块、选择模块和加载模块。本发明通过将待加载应用编译成系统可执行的二进制映像文件,在加载时不需要转化字节码的过程,减少加载应用的内存开销,保证了系统的运行效率,同时提高了加载效率。
Description
技术领域
本发明涉及通信技术领域,特别涉及一种动态加载应用的方法及装置。
背景技术
随着通信技术的不断发展,各种智能终端相继出现,应用范围也越来越广,但目前市面上仍然存在大量的非智能终端,而这些常见的非智能终端的平台本身是不支持应用的动态加载的,如果要在非智能终端上加载应用,就需要在非智能终端出厂前将其编译链接生成一个可执行文件,并将这个可执行文件烧录在非智能终端上。
为了在非智能终端上实现应用的动态加载,现有技术采用了在非智能终端的系统中内置一个JVM(Java Virtual Machine,Java虚拟机)的方式,待加载应用通过使用Java语言生成在JVM上运行的字节码,再借助JVM将字节码解释成系统可执行的机器码,由此实现待加载应用的动态加载。
在实现本发明的过程中,发明人发现现有技术至少存在以下问题:
非智能终端的内存较小,而内置JVM以及JVM的运行都需要占用较大的内存空间;且在加载应用时,JVM需要执行将字节码转化为机器码的过程,导致系统运行效率降低,另外,JVM的维护需要较高的成本。
发明内容
为了在减少内存占用量的前提下实现应用的动态加载,保证系统运行效率,并降低维护成本,本发明实施例提供了一种动态加载应用的方法及装置。所述技术方案如下:
一方面,提供了一种动态加载应用的方法,所述方法包括:
将待加载应用编译成系统可执行的二进制映像文件,所述二进制映像文件中的函数地址为与位置无关的相对地址;
根据预先为所述待加载应用预留的入口,从所述二进制映像文件中选择位于所述二进制映像文件起始位置的指定函数,所述指定函数的地址为相对于所述入口的绝对地址;
根据所述指定函数的地址将所述二进制映像文件加载至内存空间。
其中,所述根据所述指定函数的地址将所述二进制映像文件加载至内存空间,具体包括:
根据所述指定函数的地址将所述二进制映像文件中的除所述指定函数之外的其他函数的相对地址转化成绝对地址,根据转化后的绝对地址将所述二进制映像文件加载至内存空间。
进一步地,所述将待加载应用编译成系统可执行的二进制映像文件之后,还包括:
将所述二进制映像文件分成所述待加载应用的主程序对应的二进制映像文件和所述待加载应用的子程序对应的二进制映像文件;
所述根据所述指定函数的地址将所述二进制映像文件加载至内存空间,具体包括:
根据所述指定函数的地址将所述待加载应用的主程序对应的二进制映像文件加载至内存空间,并在所述主程序的控制下,将所述待加载应用的子程序对应的二进制映像文件加载至内存空间。
所述在所述主程序的控制下,将待加载应用的子程序对应的二进制映像文件加载至内存空间之后,还包括:
根据在主程序的控制下,从内存空间中卸载所述待加载应用的子程序对应的二进制映像文件。
另外,所述根据所述指定函数的地址将所述二进制映像文件加载至内存空间之后,还包括:
将指针指向所述二进制映像文件所在的内存空间,并跳转至所述指定函数,从所述位于起始位置的指定函数运行所述待加载应用。
进一步地,所述根据所述指定函数的地址将所述二进制映像文件加载至内存空间之后,还包括:
将外部函数的地址填充进二维数组,并将所述二维数组的首地址传递给所述待加载应用,由所述待加载应用从所述二维数组中选择指针,并根据选择的指针调用对应的外部函数。
另一方面,提供了一种动态加载应用的装置,所述装置包括:
编译模块,用于将待加载应用编译成系统可执行的二进制映像文件,所述二进制映像文件中的函数地址为与位置无关的相对地址;
选择模块,用于根据预先为所述待加载应用预留的入口,从所述编译模块得到的二进制映像文件中选择位于所述二进制映像文件起始位置的指定函数,所述指定函数的地址为相对于所述入口的绝对地址;
加载模块,用于根据所述选择模块选择的指定函数的地址将所述二进制映像文件加载至内存空间。
其中,所述加载模块,具体包括:
转化单元,用于根据所述选择模块选择的指定函数的地址将所述二进制映像文件中的除所述指定函数之外的其他函数的相对地址转化成绝对地址;
加载单元,用于根据所述转化单元转化后的绝对地址将所述二进制映像文件加载至内存空间。
所述装置还包括:
划分模块,用于将所述编译模块得到的二进制映像文件分成所述待加载应用的主程序对应的二进制映像文件和所述待加载应用的子程序对应的二进制映像文件;
具体地,所述加载模块,具体用于根据所述指定函数的地址将所述待加载应用的主程序对应的二进制映像文件加载至内存空间,并在所述主程序的控制下,将所述待加载应用的子程序对应的二进制映像文件加载至内存空间。
所述加载模块,还用于在所述主程序的控制下,从内存空间中卸载所述待加载应用的子程序对应的二进制映像文件。
进一步地,所述装置还包括:
运行模块,用于将指针指向所述二进制映像文件所在的内存空间,并跳转至所述指定函数,从所述指定函数运行所述待加载应用。
调用模块,用于将外部函数的地址填充进二维数组,并将所述二维数组的首地址传递给所述待加载应用,由所述待加载应用从所述二维数组中选择指针,并根据选择的指针调用对应的外部函数。
本发明实施例提供的技术方案带来的有益效果是:
通过将待加载应用编译成系统可执行的二进制映像文件,在加载时不需要转化字节码的过程,减少加载待加载应用的内存开销,保证了系统的运行效率,同时由于无需借助JVM的运行实现应用的加载,提高了加载效率。另外,通过将待加载应用划分成主程序和子程序,根据主程序控制加载子程序,并根据主程序控制卸载子程序,从而可进一步减少内存的占用量。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例一提供的一种动态加载应用的方法流程图;
图2是本发明实施例二提供的一种动态加载应用的方法流程图;
图3是本发明实施例三提供的第一种动态加载应用的装置结构示意图;
图4是本发明实施例三提供的一种加载模块的结构示意图;
图5是本发明实施例三提供的第二种动态加载应用的装置结构示意图;
图6是本发明实施例三提供的第三种动态加载应用的装置结构示意图;
图7是本发明实施例三提供的第四种动态加载应用的装置结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
实施例一
本实施例提供了一种动态加载应用的方法,参见图1,该方法流程具体如下:
101:将待加载应用编译成系统可执行的二进制映像文件,该二进制映像文件中的函数地址为与位置无关的相对地址。
102:根据预先为该待加载应用预留的入口,从二进制映像文件中选择位于该二进制映像文件起始位置的指定函数,指定函数的地址为相对于入口的绝对地址。
103:根据指定函数的地址将二进制映像文件加载至内存空间。
其中,根据指定函数的地址将二进制映像文件加载至内存空间,具体包括:
根据指定函数的地址将二进制映像文件中的除指定函数之外的其他函数的相对地址转化成绝对地址,根据转化后的绝对地址将二进制映像文件加载至内存空间。
进一步地,将待加载用编译成系统可执行的二进制映像文件之后,还包括:
将二进制映像文件分成待加载应用的主程序对应的二进制映像文件和待加载应用的子程序对应的二进制映像文件;
具体地,根据指定函数的地址将二进制映像文件加载至内存空间,具体包括:
根据指定函数的地址将待加载应用的主程序对应的二进制映像文件加载至内存空间,并根据主程序控制将待加载的子程序对应的二进制映像文件加载至内存空间。
进一步地,在主程序的控制下,将待加载应用的子程序对应的二进制映像文件加载至内存空间之后,还包括:
在主程序的控制下,从内存空间中卸载待加载应用的子程序对应的二进制映像文件。
另外,根据指定函数的地址将二进制映像文件加载至内存空间之后,还包括:
将指针指向二进制映像文件所在的内存空间,并跳转至指定函数,从指定函数运行待加载应用。
将外部函数的地址填充进二维数组,并将二维数组的首地址传递给待加载应用,由待加载应用从二维数组中选择指针,并根据选择的指针调用对应的外部函数。
本实施例提供的方法,通过将待加载应用编译成系统可执行的二进制映像文件,在加载时不需要转化字节码的过程,减少加载应用的内存开销,保证了系统的运行效率,同时由于无需借助JVM的运行实现应用的加载,提高了加载效率。另外,通过将待加载应用划分成主程序和子程序,根据主程序控制加载子程序,并根据主程序控制卸载子程序,从而可进一步减少内存的占用量。
为了更加清楚地阐述上述实施例提供的方法,结合上述内容,接下来以如下实施例二为例,对动态加载应用的方法进行详细地说明,详见如下实施例二:
实施例二
本实施例提供了一种动态加载应用的方法,该方法结合上述实施例一的内容,对动态加载应用的过程进行了详细地说明。参见图2,本实施例提供的方法流程具体如下:
201:将待加载应用编译成系统可执行的二进制映像文件,该二进制映像文件中的函数地址为与位置无关的相对地址。
针对该步骤,待加载应用可以为C源代码的形式,该待加载应用的C源代码需要转换为系统可执行的机器码才能在系统上运行,为此,本实施例在加载该待加载应用时,采取了将待加载应用直接编译成机器码的方式,并将机器码以系统可执行的二进制映像文件来体现,在编译时将所述待加载应用编译成系统可执行的二进制映像文件,以通过加载这些二进制映像文件,实现待加载应用的加载。
具体地,在将待加载应用编译成系统可执行的二进制映像文件时,可以通过嵌入式设备来实现,使动态加载应用建立在嵌入式系统结构之上。例如,通过ARM(Advanced ReducedInstruction Set Computer Machines,演进精简指令集计算机机器)编译器将待加载应用编译成系统可执行的二进制映像文件。其中,ARM体系通过两个关键的编译选项-ropi和-rwpi对待加载应用进行编译,并在编译之后,通过链接阶段将编译的机器码链接为与位置无关的二进制映像文件,即编译链接之后生成的二进制映像文件是与位置无关的,里面的函数地址等都是一个相对地址。当然,除了采用ARM编译器将待加载应用编译成系统可执行的二进制映像文件外,也可以采用其它编译工具进行编译,本实施例对此不做具体限定。
进一步地,为了降低待加载应用占用的内存,该步骤在将待加载应用编译成系统可执行的二进制映像文件后,还可将该二进制映像文件分成待加载应用的主程序对应的二进制映像文件和待加载应用子程序对应的二进制映像文件。其中,待加载应用的主程序可以看作是待加载应用的必要程序,该主程序可实现待加载应用的主要功能,而待加载应用的子程序可以看成是一些可选的程序。通过将二进制映像文件按照程序划分,可以有选择性的加载部分待加载应用。且由于每个函数都有各自的相对地址,因此可以加载到内存的任意位置,即与位置无关。
然而,无论是待加载应用的主程序对应的二进制映像文件,还是待加载应用的子程序对应的二进制映像文件,均可由一至多个函数组成,且都能完成相应的功能。因而,主程序或各子程序对应的二进制映像文件都可以看作是独立的应用,从而分别进行加载,实现将一个完整的应用分成相对独立的若干个程序,需要某个程序的时候就加载,不需要的时候就卸载,这样,常驻内存的实际上就仅有主程序,大大减少了内存的占用量。
202:根据预先为待加载应用预留的入口,从二进制映像文件中选择位于二进制映像文件起始位置的指定函数,该指定函数的地址为相对于入口的绝对地址。
其中,为待加载应用预留的入口即为编译该待加载应用时为该待加载应用预留的程序入口,为了保证有足够的内存在加载待加载应用,以及运行待加载应用,本实施例提供的方法在为待加载应用预留入口之后,还支持为该入口预留内存空间的步骤。针对根据预先为待加载应用预留的入口,在二进制映像文件中选择位于二进制映像文件起始位置的指定函数的方式,本实施例不作具体限定。实际应用中,在上述步骤201通过ARM编译器对待加载应用进行编译时,该ARM体系还包括另外一个编译选项-first,该步骤在选择二进制映像文件起始位置的指定函数时,可通过编译选项-first来指定二进制映像中哪一个函数分布在二进制映像的开始位置,也就是说,由编译选项-first所选择的指定函数的入口将位于所产生二进制映像文件的起始位置,而这个指定函数的地址是为加载平台已知的一个绝对地址,通过该绝对地址即可实现对二进制映像文件中的相对地址进行重定位。
203:根据指定函数的地址将二进制映像文件加载至内存空间。
具体地,由于指定函数的地址为加载平台已知的一个绝对地址,而通过该绝对地址又可对二进制映像文件中的相对地址进行重定位,因此,根据指定函数的地址将二进制映像文件加载至内存空间时,可根据指定函数的地址将二进制映像文件中的其他函数的相对地址转化成绝对地址,之后根据转化后的绝对地址将二进制映像文件加载至内存空间。
为了节省加载的待加载应用占用的内存,在上述步骤201将待加载应用的二进制映像文件划分为主程序对应的二进制映像文件与子程序对应的二进制映像文件的情况下,该步骤可分别加载主程序和子程序对应的二进制映像文件,以实现按需求进行待加载应用的加载。在按需求加载待加载应用时,由于待加载应用的主程序可以看作是待加载应用的必要程序,该主程序可实现待加载应用的主要功能,而待加载应用的子程序可以看成是一些可选的程序。因此,需要将主程序对应的二进制映像文件加载到内存,之后再根据运行需要由主程序控制加载子程序对应的二进制映像文件。例如,子程序为了实现待加载应用的帮助功能,因而,在用户使用该待加载应用上的帮助功能时,再由待加载应用的主程序控制加载子程序对应的二进制映像文件。
其中,在通过待加载应用的主程序控制加载子程序对应的二进制映像文件时,每个子程序都有各自对应的函数名,主程序获取要加载的子程序的名称,即对应的函数名,通过子程序对应的函数名来加载子程序对应的二进制映像文件,实现将待加载应用的子程序加载到内存空间。
至此,加载待加载应用的流程结束,在将待加载应用加载至内存空间之后,该待加载应用的运行方式可通过如下步骤实现。
204:将指针指向二进制映像文件所在的内存空间,并跳转至指定函数,从该位于起始位置的指定函数运行待加载应用。
针对该步骤,通过将指针指向二进制映像文件所在的内存空间,并跳转至指定函数,使CPU(Central Processing Unit,中央处理单元)的控制权交给该二进制映像文件,即由待加载应用控制CPU,实现待加载应用的运行。
另外,动态加载的待加载应用在运行时,如果调用平台的接口,正常情况下,执行中的代码要想调用另外一个函数,必须知道该函数的地址,如果调用者和被调用者在一起链接,那么函数的绝对或者相对地址将会在链接阶段写在代码里,从而解决了寻址的问题;但是,动态加载的代码如果调用一个外部的不跟自己一起链接的函数呢?可以采用导出函数表的形式来解决这一问题,对此,本实施例提供的方法将任一个或多个外部函数的地址,该地址为绝对地址,将该地址填充进一个二维数组,将二维数组的首地址传递给待加载应用,实际执行过程中,所有的函数调用都是先从二维数组里取出函数指针,即由待加载应用从二维数组中选择指针,并根据选择的指针调用对应的外部函数。
本实施例提供的方法,通过将待加载应用编译成系统可执行的二进制映像文件,在加载时不需要转化字节码的过程,减少加载应用的内存开销,保证了系统的运行效率,同时由于无需借助JVM的运行实现应用的加载,提高了加载效率。另外,通过将待加载应用划分成主程序和子程序,根据主程序控制加载子程序,并根据主程序控制卸载子程序,从而可进一步减少内存的占用量。
实施例三
本实施例提供了一种动态加载应用的装置,该装置可以用于执行上述实施例一和实施例二提供的动态加载应用的方法,参见图3,该装置包括:
编译模块301,用于将待加载应用编译成系统可执行的二进制映像文件,该二进制映像文件中的函数地址为与位置无关的相对地址;
选择模块302,用于根据预先为待加载应用预留的入口,从编译模块301得到的二进制映像文件中选择位于二进制映像文件起始位置的指定函数,该指定函数的地址为相对于入口的绝对地址;
加载模块303,用于根据选择模块选择的指定函数的地址将二进制映像文件加载至内存空间。
其中,编译模块301将待加载应用编译成系统可执行的二进制映像文件的方式可详见如上实施例二中步骤201的相关描述,此处不再赘述。
具体地,参见图4,加载模块303,具体包括:
转化单元303A,用于根据选择模块302选择的指定函数的地址将二进制映像文件中的除指定函数之外的其他函数的相对地址转化成绝对地址;
加载单元303B,用于根据转化单元303A转化后的绝对地址将二进制映像文件加载至内存空间。
优选地,为了进一步降低待加载应用占用的内存开销,参见图5,该装置还包括:
划分模块304,用于将编译模块301得到的二进制映像文件分成待加载应用的主程序对应的二进制映像文件和待加载应用的子程序对应的二进制映像文件;
具体地,加载模块304,具体用于根据指定函数的地址将待加载应用的主程序对应的二进制映像文件加载至内存空间,并在主程序的控制下,将待加载应用的子程序对应的二进制映像文件加载至内存空间。
其中,待加载应用的主程序可以看作是待加载应用的必要程序,该主程序可实现待加载应用的主要功能,而待加载应用的子程序可以看成是一些可选的程序。通过将二进制映像文件按照程序划分,可以有选择性的加载部分待加载应用。且由于每个函数都有各自的相对地址,因此可以加载到内存的任意位置,即与位置无关。
然而,无论是待加载应用的主程序对应的二进制映像文件,还是待加载应用的子程序对应的二进制映像文件,均可由一至多个函数组成,且都能完成相应的功能。因而,主程序或各子程序对应的二进制映像文件都可以看作是独立的应用,从而分别进行加载,实现将一个完整的应用分成相对独立的若干个程序,需要某个程序的时候就加载,不需要的时候就卸载,这样,常驻内存的实际上就仅有主程序,大大减少了内存的占用量。
优选地,加载模块304,还用于在主程序的控制下,从内存空间中卸载待加载应用的子程序对应的二进制映像文件。
进一步地,在将待加载应用加载至内存空间之后,为了支持该待加载应用的运行,参见图6,该装置还包括:
运行模块305,用于在加载模块303根据指定函数的地址将二进制映像文件加载至内存空间之后,将指针指向二进制映像文件所在的内存空间,并跳转至指定函数,从位于起始位置的指定函数运行待加载应用。
进一步地,待加载应用在运行过程中,为了实现待加载应用对其他外部函数的调用,参见图7,该装置还包括:
调用模块306,用于在加载模块303根据指定函数的地址将二进制映像文件加载至内存空间之后,将外部函数的地址填充进二维数组,并将二维数组的首地址传递给待加载应用,由待加载应用从二维数组中选择指针,并根据选择的指针调用对应的外部函数。
需要说明的是,该动态加载应用的装置可以分为固化层和加载层,固化层主要对所在终端的接口进行包装,提供功能接口导出函数供加载层使用,通常这一层的代码是需要内置到终端操作系统上的;而加载层使用固化层提供的导出函数,提供了应用的下载、升级和运行时环境等功能。为了进一步减少内存占用量,可将该动态加载应用的装置中的固化层内置到内存中,加载层可根据需要来加载到内存中,以此减少内存的开销。
本实施例提供的动态加载应用的装置,通过将待加载应用编译成系统可执行的二进制映像文件,在加载时不需要转化字节码的过程,减少加载应用的内存开销,保证了系统的运行效率,同时由于无需借助JVM的运行实现应用的加载,提高了加载效率。另外,通过将待加载应用划分成主程序和子程序,根据主程序控制加载子程序,并根据主程序控制卸载子程序,从而可进一步减少内存的占用量。
需要说明的是:上述实施例提供的动态加载应用的装置在进行动态加载应用时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的动态加载应用的装置与动态加载应用的方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (12)
1.一种动态加载应用的方法,其特征在于,所述方法包括:
将待加载应用编译成系统可执行的二进制映像文件,所述二进制映像文件中的函数地址为与位置无关的相对地址;
根据预先为所述待加载应用预留的入口,从所述二进制映像文件中选择位于所述二进制映像文件起始位置的指定函数,所述指定函数的地址为相对于所述入口的绝对地址;
根据所述指定函数的地址将所述二进制映像文件加载至内存空间。
2.根据权利要求1所述的方法,其特征在于,所述根据所述指定函数的地址将所述二进制映像文件加载至内存空间,具体包括:
根据所述指定函数的地址将所述二进制映像文件中的除所述指定函数之外的其他函数的相对地址转化成绝对地址;
根据转化后的各函数的绝对地址将所述二进制映像文件加载至内存空间。
3.根据权利要求1所述的方法,其特征在于,所述将待加载应用编译成系统可执行的二进制映像文件之后,还包括:
所述二进制映像文件包括:所述待加载应用的主程序对应的二进制映像文件和所述待加载应用的子程序对应的二进制映像文件;
所述根据所述指定函数的地址将所述二进制映像文件加载至内存空间,具体包括:
根据所述指定函数的地址将所述待加载应用的主程序对应的二进制映像文件加载至内存空间,并在所述主程序的控制下,将所述待加载应用的子程序对应的二进制映像文件加载至内存空间。
4.根据权利要求3所述的方法,其特征在于,所述在所述主程序的控制下,将所述待加载应用的子程序对应的二进制映像文件加载至内存空间之后,还包括:
在所述主程序的控制下,从内存空间中卸载所述待加载应用的子程序对应的二进制映像文件。
5.根据权利要求1所述的方法,其特征在于,所述根据所述指定函数的地址将所述二进制映像文件加载至内存空间之后,还包括:
将指针指向所述二进制映像文件所在的内存空间,并跳转至所述指定函数,从所述位于起始位置的指定函数运行所述待加载应用。
6.根据权利要求1所述的方法,其特征在于,所述根据所述指定函数的地址将所述二进制映像文件加载至内存空间之后,还包括:
将外部函数的地址填充进二维数组,并将所述二维数组的首地址传递给所述待加载应用,由所述待加载应用从所述二维数组中选择指针,并根据选择的指针调用对应的外部函数。
7.一种动态加载应用的装置,其特征在于,所述装置包括:
编译模块,用于将待加载应用编译成系统可执行的二进制映像文件,所述二进制映像文件中的函数地址为与位置无关的相对地址;
选择模块,用于根据预先为所述待加载应用预留的入口,从所述编译模块得到的二进制映像文件中选择位于所述二进制映像文件起始位置的指定函数,所述指定函数的地址为相对于所述入口的绝对地址;
加载模块,用于根据所述选择模块选择的指定函数的地址将所述二进制映像文件加载至内存空间。
8.根据权利要求7所述的装置,其特征在于,所述加载模块,具体包括:
转化单元,用于根据所述选择模块选择的指定函数的地址将所述二进制映像文件中的除所述指定函数之外的其他函数的相对地址转化成绝对地址;
加载单元,用于根据所述转化单元转化后的绝对地址将所述二进制映像文件加载至内存空间。
9.根据权利要求7所述的装置,其特征在于,所述装置还包括:
划分模块,用于将所述编译模块得到的二进制映像文件分成所述待加载应用的主程序对应的二进制映像文件和所述待加载应用的子程序对应的二进制映像文件;
所述加载模块,具体用于根据所述指定函数的地址将所述待加载应用的主程序对应的二进制映像文件加载至内存空间,并在所述主程序的控制下,将所述待加载应用的子程序对应的二进制映像文件加载至内存空间。
10.根据权利要求9所述的装置,其特征在于,所述加载模块,还用于在所述主程序的控制下,从内存空间中卸载所述待加载应用的子程序对应的二进制映像文件。
11.根据权利要求7所述的装置,其特征在于,所述装置还包括:
运行模块,用于将指针指向所述二进制映像文件所在的内存空间,并跳转至所述指定函数,从所述位于起始位置的指定函数运行所述待加载应用。
12.根据权利要求7所述的装置,其特征在于,所述装置还包括:
调用模块,用于将外部函数的地址填充进二维数组,并将所述二维数组的首地址传递给所述待加载应用,由所述待加载应用从所述二维数组中选择指针,并根据选择的指针调用对应的外部函数。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2012100584456A CN103309684A (zh) | 2012-03-07 | 2012-03-07 | 动态加载应用的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2012100584456A CN103309684A (zh) | 2012-03-07 | 2012-03-07 | 动态加载应用的方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN103309684A true CN103309684A (zh) | 2013-09-18 |
Family
ID=49134945
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2012100584456A Pending CN103309684A (zh) | 2012-03-07 | 2012-03-07 | 动态加载应用的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103309684A (zh) |
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104407887A (zh) * | 2014-11-06 | 2015-03-11 | 航天科工深圳(集团)有限公司 | 一种嵌入式系统内核模块动态加载程序的方法及装置 |
CN106371920A (zh) * | 2016-08-24 | 2017-02-01 | 天脉聚源(北京)传媒科技有限公司 | 一种避免内存地址冲突的方法及装置 |
CN106547578A (zh) * | 2015-09-21 | 2017-03-29 | 阿里巴巴集团控股有限公司 | 终端应用app的加载方法及装置 |
CN107179923A (zh) * | 2017-03-31 | 2017-09-19 | 腾讯科技(深圳)有限公司 | 应用程序处理方法、装置和计算机设备 |
CN107247608A (zh) * | 2017-05-31 | 2017-10-13 | 河南思维轨道交通技术研究院有限公司 | 一种具有应用软件硬件地址无关性的操作系统实现方法 |
CN108228273A (zh) * | 2017-09-29 | 2018-06-29 | 珠海市魅族科技有限公司 | 一种执行可执行文件的方法及设备 |
CN108241516A (zh) * | 2018-02-09 | 2018-07-03 | 深圳科立讯通信有限公司 | 嵌入式系统程序加载方法、装置、计算机设备和存储介质 |
CN108415737A (zh) * | 2018-02-07 | 2018-08-17 | 北京奇虎科技有限公司 | 一种在虚拟机中加载插件的方法及电子终端 |
CN110162306A (zh) * | 2018-02-14 | 2019-08-23 | 阿里巴巴集团控股有限公司 | 系统的提前编译方法和装置 |
CN111190658A (zh) * | 2020-01-08 | 2020-05-22 | 乐鑫信息科技(上海)股份有限公司 | 一种基于片内执行且在不具有MMU的SoC片上支持应用程序动态加载的系统 |
CN111949296A (zh) * | 2020-08-07 | 2020-11-17 | 北京字节跳动网络技术有限公司 | 一种数据更新方法及装置 |
CN112269606A (zh) * | 2020-11-12 | 2021-01-26 | 浙江大学 | 一种类脑计算机操作系统的应用处理程序动态加载方法 |
CN112650501A (zh) * | 2020-12-31 | 2021-04-13 | 重庆芯讯通无线科技有限公司 | 编译、终端设备及其客户应用程序的编译链接和加载方法 |
CN114880076A (zh) * | 2022-05-11 | 2022-08-09 | 科东(广州)软件科技有限公司 | 一种用户态虚拟机的动态映像文件的动态加载方法及装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101661397A (zh) * | 2008-08-29 | 2010-03-03 | 宇龙计算机通信科技(深圳)有限公司 | 实现程序动态加载的方法和生成映射文件的方法及设备 |
CN101668283A (zh) * | 2008-09-01 | 2010-03-10 | 沃勤网络科技(上海)有限公司 | 一种手机嵌入式系统中动态加载的方法 |
CN101814020A (zh) * | 2010-04-15 | 2010-08-25 | 长沙理工大学 | 一种基于嵌入式的程序快速执行方法及系统 |
-
2012
- 2012-03-07 CN CN2012100584456A patent/CN103309684A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101661397A (zh) * | 2008-08-29 | 2010-03-03 | 宇龙计算机通信科技(深圳)有限公司 | 实现程序动态加载的方法和生成映射文件的方法及设备 |
CN101668283A (zh) * | 2008-09-01 | 2010-03-10 | 沃勤网络科技(上海)有限公司 | 一种手机嵌入式系统中动态加载的方法 |
CN101814020A (zh) * | 2010-04-15 | 2010-08-25 | 长沙理工大学 | 一种基于嵌入式的程序快速执行方法及系统 |
Cited By (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104407887A (zh) * | 2014-11-06 | 2015-03-11 | 航天科工深圳(集团)有限公司 | 一种嵌入式系统内核模块动态加载程序的方法及装置 |
US10664289B2 (en) | 2015-09-21 | 2020-05-26 | Alibaba Group Holding Limited | Loading sub-applications for a terminal application |
CN106547578A (zh) * | 2015-09-21 | 2017-03-29 | 阿里巴巴集团控股有限公司 | 终端应用app的加载方法及装置 |
CN106547578B (zh) * | 2015-09-21 | 2020-09-15 | 阿里巴巴集团控股有限公司 | 终端应用app的加载方法及装置 |
CN106371920A (zh) * | 2016-08-24 | 2017-02-01 | 天脉聚源(北京)传媒科技有限公司 | 一种避免内存地址冲突的方法及装置 |
CN107179923A (zh) * | 2017-03-31 | 2017-09-19 | 腾讯科技(深圳)有限公司 | 应用程序处理方法、装置和计算机设备 |
CN107247608A (zh) * | 2017-05-31 | 2017-10-13 | 河南思维轨道交通技术研究院有限公司 | 一种具有应用软件硬件地址无关性的操作系统实现方法 |
CN108228273A (zh) * | 2017-09-29 | 2018-06-29 | 珠海市魅族科技有限公司 | 一种执行可执行文件的方法及设备 |
CN108228273B (zh) * | 2017-09-29 | 2021-07-16 | 珠海市魅族科技有限公司 | 一种执行可执行文件的方法及设备 |
CN108415737A (zh) * | 2018-02-07 | 2018-08-17 | 北京奇虎科技有限公司 | 一种在虚拟机中加载插件的方法及电子终端 |
CN108415737B (zh) * | 2018-02-07 | 2021-11-19 | 北京奇虎科技有限公司 | 一种在虚拟机中加载插件的方法及电子终端 |
CN108241516A (zh) * | 2018-02-09 | 2018-07-03 | 深圳科立讯通信有限公司 | 嵌入式系统程序加载方法、装置、计算机设备和存储介质 |
CN110162306A (zh) * | 2018-02-14 | 2019-08-23 | 阿里巴巴集团控股有限公司 | 系统的提前编译方法和装置 |
CN110162306B (zh) * | 2018-02-14 | 2023-06-23 | 斑马智行网络(香港)有限公司 | 系统的提前编译方法和装置 |
CN111190658A (zh) * | 2020-01-08 | 2020-05-22 | 乐鑫信息科技(上海)股份有限公司 | 一种基于片内执行且在不具有MMU的SoC片上支持应用程序动态加载的系统 |
CN111190658B (zh) * | 2020-01-08 | 2023-02-28 | 乐鑫信息科技(上海)股份有限公司 | 一种基于片内执行且在不具有MMU的SoC片上支持应用程序动态加载的系统 |
CN111949296A (zh) * | 2020-08-07 | 2020-11-17 | 北京字节跳动网络技术有限公司 | 一种数据更新方法及装置 |
CN112269606A (zh) * | 2020-11-12 | 2021-01-26 | 浙江大学 | 一种类脑计算机操作系统的应用处理程序动态加载方法 |
CN112650501A (zh) * | 2020-12-31 | 2021-04-13 | 重庆芯讯通无线科技有限公司 | 编译、终端设备及其客户应用程序的编译链接和加载方法 |
CN114880076A (zh) * | 2022-05-11 | 2022-08-09 | 科东(广州)软件科技有限公司 | 一种用户态虚拟机的动态映像文件的动态加载方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103309684A (zh) | 动态加载应用的方法及装置 | |
CN108121594B (zh) | 一种进程管理方法及装置 | |
CN101630251A (zh) | 跨桌面和嵌入式系统的图形界面开发方法及系统 | |
CN102681893A (zh) | 可执行程序的跨平台实现方法及移动终端 | |
CN102023885A (zh) | 一种存储Java卡运行时环境字节码的方法及系统 | |
WO2007070073A3 (en) | System and method for efficiently generating native code calls from byte code in virtual machines | |
CN101937356B (zh) | 一种编译WebKit浏览器的方法及装置 | |
JPH01154267A (ja) | 入出力機器制御プログラムのアドレス解決方法 | |
CN104090765A (zh) | 一种手机游戏转网页游戏的方法及装置 | |
CN108415719A (zh) | 代码热更新方法和装置、存储介质、处理器及终端 | |
CN104731622B (zh) | 一种应用程序的加载方法、装置和移动终端 | |
CN102622263B (zh) | 机顶盒上基于嵌入式系统虚拟机的实现方法 | |
TWI355607B (zh) | ||
CN102004662A (zh) | 嵌入式可裁剪式虚拟机 | |
CN1879067A (zh) | 匹配用于控制工作过程的函数的方法和装置 | |
Bothner | Compiling Java with GCJ | |
US20080301719A1 (en) | Mapping Of Dynamic Link Libraries In Computing Devices | |
US7685565B1 (en) | Run time reconfiguration of computer instructions | |
CN103631585A (zh) | 一种用于开发应用程序的方法及系统 | |
CN103677767A (zh) | 一种处理应用程序的方法、操作系统及电子设备 | |
CN110032375A (zh) | 一种前端支持增量发布的多页面方法及装置 | |
CN109714642A (zh) | Linux应用复用于智能系统的方法、智能电视及存储介质 | |
CN114546515A (zh) | 动态加载静态库的模块、固件及设备和C库转Lua库的方法 | |
CN100476736C (zh) | 在虚拟机环境下调用方法的方法和包括虚拟机的系统 | |
CN112558976B (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 | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20130918 |
|
RJ01 | Rejection of invention patent application after publication |