CN101290571B - 一种生成可被动态装载执行的文件的方法 - Google Patents
一种生成可被动态装载执行的文件的方法 Download PDFInfo
- Publication number
- CN101290571B CN101290571B CN200710090227XA CN200710090227A CN101290571B CN 101290571 B CN101290571 B CN 101290571B CN 200710090227X A CN200710090227X A CN 200710090227XA CN 200710090227 A CN200710090227 A CN 200710090227A CN 101290571 B CN101290571 B CN 101290571B
- Authority
- CN
- China
- Prior art keywords
- file
- executable file
- data
- reorientation
- address
- 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.)
- Expired - Fee Related
Links
Images
Landscapes
- Stored Programmes (AREA)
Abstract
本发明提供一种生成可被动态装载执行的文件的方法,包含:输入步骤、重定位数据生成步骤、以及输出步骤。本发明可以在任何的编译环境或系统下获得重定位数据,从而生成可被动态装载执行的文件,尤其在封闭的嵌入式平台上,可以很容易将系统软件与应用程序分离开来,从而提供一种灵活的可替换升级以及增加额外应用程序的途径。既方便了用户,也为软件开发商提供了新的机会。
Description
技术领域
本发明涉及一种生成可被动态装载执行的文件的方法。
背景技术
在当前的软件技术中,特别是桌面软件领域,系统软件与应用程序软件是分开的。在一个系统软件之上有众多的应用程序软件,这些应用程序可以很方便的安装,升级或者被替换甚至被删除掉。这些应用软件以及他们所依赖的动态链接库之所以能被系统程序动态的装载运行,是因为这些应用软件和动态链接库所使用的链接器能够提供足够的重定位信息告诉系统程序来如何装载与重定位他们。
反观嵌入式领域,最常见的做法是系统程序与应用程序被链接成一个整体,然后被“嵌入”到设备的存储器中,如果想更新某个小应用程序,只能整个全部更新,而要想在设备已经提供给用户的情况下再给用户继续提供新的应用程序是不可能的。
为了打破在嵌入式领域的这种限制,JAVA(注册商标)提供了一个统一的运行平台,应用程序可以动态装载,用户也可以下载自己喜欢的新的应用程序,或者删除不喜欢的应用程序。但是这种虚拟机以及它的系统复杂度却要消耗用户太多的电量以及耗费软件制造商大量的集成测试时间。
另一方面,现代的嵌入式设备的性能在飞速提升,于是基于这些高性能设备的软件也开始变得智能,它们能够支持可以被动态加载执行的程序。当然这些应用程序所使用的开发工具已经为之生成了足够的重定位信息,而且系统程序也能依照这些开发工具所定义和指定的重定位信息来装载和运行这些程序。但是并不是所有的硬件设备都能使用这样的软件系统,比如一些低配置的嵌入式设备便无法使用这样的软件系统。
然而,实际上仍然有众多嵌入式设备使用古老的方法,将系统软件与应用软件一体化。而且其开发工具也很适应这种类似情况,在生成可执行文件时,并不在这些可执行文件中包含任何重定位信息,因为它不需要重定位,只要使用一个固定装载值即可。这使得用户在获得这些设备之后不能很便利的更新升级应用,更不可能获得新的应用,对于软件供应商来说,当然也就无法继续出售应用程序给用户了。
发明内容
本发明的目的在于提供一种生成可被动态装载执行的文件的方法,能够在任何的编译环境下生成可被动态装载执行的文件。
本发明的生成可被动态装载执行的文件的方法,包含:输入步骤,用于输入大小相同的第一可执行文件和第二可执行文件,在链接时,所述第一可执行文件和所述第二可执行文件所使用的输入文件以及除了装载地址以外的所有其它链接选项都相同;重定位数据生成步骤,用于根据所述输入步骤提供的所述第一可执行文件和所述第二可执行文件,从文件的头部开始比较两者所对应的相同地址的数据大小,如果大小不同,则记录所述地址值,直至文件的结束,同时记录所述重定位数据的个数,所述记录的地址值组成所述重定位数据;输出步骤,根据所述重定位数据生成步骤中生成的所述重定位数据的个数和所述重定位数据以及所述第一可执行文件或所述第二可执行文件,生成所述可被动态装载执行的文件并输出。
本发明,通过两个原始可执行文件来获得重定位数据,然后生成动态可被装载执行的文件,可以很容易将系统软件与应用程序分离开来,从而提供一种灵活的可替换升级以及增加额外应用程序的途径。既方便了用户,也为软件开发商提供了新的机会。特别对那些开发工具无法为可执行文件生成重定位数据的系统,本发明弥补了原始开发工具的不足。
附图说明
图1为表示实施本发明的步骤的框图;
图2为根据本发明的装置结构图;
图3为本发明的方法流程图;
图4为根据本发明的系统端执行流程图。
具体实施方式
以下结合附图对本发明的具体实施方式进行详细说明。图1为表示实施本发明的步骤的框图。图2为本发明所应用的装置的结构框图,如图所示,该装置包括中央处理器21,非易失存储器22,随机访问存储器23。
中央处理器21,与非易失存储器22和随机访问存储器23分别连接,中央处理器21从非易失存储器22和随即访问存储器23中读写数据并执行程序。非易失存储器22,与中央处理器21和随机访问存储器23分别连接,在系统断电以后,保存在非易失存储器22上的数据不会丢失。随机访问存储器23,与中央处理器21和非易失存储器22分别连接,一般情况下,其访问速度较非易失存储器快,断电后数据会丢失。
在本发明中,先在指定编译环境下编译链接出第一可执行文件A和第二可执行文件B(不包含可重位数据),第一可执行文件A和第二可执行文件B仅仅是装载地址不同,其余编译链接选项完全相同。然后,产生一个以该第一可执行文件A和第二可执行文件B作为输入文件,输出附带重定位数据的可执行文件。
图3为本发明的方法流程图,如图所示,步骤31中,将上述第一可执行文件A和第二可执行文件B设为输入参数;在步骤32中,开始读取上述第一可执行文件A和第二可执行文件B;在步骤33中,对读取的文件进行逐块比较,比较的数据必须是分别在上述A和B中有相同的偏移地址,所比较的数据块的大小取决于系统的特性,比如在32位系统的环境下,则数据块的大小应该是4个字节。在步骤34,判断步骤33中的比较结果,如果不相等则转入步骤36,将表示不等的地址值的个数N的值加1,同时把当前地址的值加入到列表Q中,然后转入步骤35。上述列表Q中的值即是重定位数据。接步骤34,如果相等转入到步骤35;在步骤35,检查是否已经比较到文件结束,如果结束,则转入到步骤37,如果没有结束则转入到步骤33,对下一个数据块进行比较;在步骤37,根据N值以及列表Q中记录的地址值,以及文件版本,时间等其它辅助信息再加上A文件(或者是B文件)生成目标文件,这样的目标文件中就已经包含了重定位数据。
在系统程序端,当系统程序要装载并执行文件时,按照在生成重定位数据时的约定来读取重定位数据,并重定位程序数据。图4为系统程序端执行文件时的流程图,如图所示,步骤41读取程序文件,程序文件保存在非易失存储器中,系统程序将程序文件读入到随机访问存储器中。然后进入步骤42,根据文件后缀信息,或者文件的头信息中标示的文件版本或者时间版权信息等来决定此文件是否为合法的可执行文件,如果为否,则转入到步骤43;在步骤43,它对系统程序抛出的错误进行处理,并通知给用户;如果在步骤42得到了是合法的可执行文件的结果,那么将转入到步骤44,系统程序将按照此可执行文件所包含的重定位数据对程序数据进行重定位,在重定位完成之后,分配ZI区域并初始化其为0;然后在步骤45跳转到文件代码开始执行。
有关进行重定位,以下详细进行说明。令上述第一可执行文件A和第二可执行文件B的装载地址分别为a和b(a和b的值不同),由于动态装载执行时的装载地址是不确定的,因此上述第一可执行文件A和第二可执行文件B是不能被动态装载执行的。将重定位数据的个数、全部重定位地址,以及ZI区域(必须在使用前设置为0的区域)的起始地址及大小,或其他需要记录的数据,比如文件版本,特定标记等,与a值和整个文件A的数据(或者b值和整个文件B的数据,如果系统有约定的a地址,也可以省略此项)组合在一起形成新的文件C,该新的文件C也就是上述可被动态装载执行的文件。在此,将C文件中除A文件以外的数据统称为“头信息”。当系统软件读取并装载上述文件C时,设定C文件中去掉“头信息”后的数据(即A文件)的装载地址为c,在装载之后,读取上述重定位数据,找到该重定位数据所指定的内存中相应的地址,并对该地址的数据执行重定位,即加上c减去a的值,然后分配ZI区域并设置为0,全部重定位完成以后,系统即可以开始执行被装载的文件的代码。
以上仅为用于说明本发明的一个实施方式,并非对本发明的限定,在不脱离本发明的技术思想范围内,还可以对各组成元素进行变更。即,只要是基于本发明思想的其它变形方式都在本发明的保护范围之内。
Claims (1)
1.一种生成可被动态装载执行的文件的方法,其特征在于,包含:
输入步骤,用于输入大小相同的第一可执行文件和第二可执行文件,所述第一可执行文件和所述第二可执行文件装载地址不同,在链接时,所述第一可执行文件和所述第二可执行文件所使用的输入文件以及除了装载地址以外的所有其它链接选项都相同;
重定位数据生成步骤,用于根据所述输入步骤提供的所述第一可执行文件和所述第二可执行文件,从文件的头部开始比较两者所对应的相同地址的数据大小,如果大小不同,则记录所述地址值,直至文件的结束,同时记录所述地址值的个数,作为重定位数据的个数,所述记录的地址值组成所述重定位数据;
输出步骤,根据所述重定位数据生成步骤中生成的所述重定位数据的个数和所述重定位数据以及所述第一可执行文件或所述第二可执行文件,生成所述可被动态装载执行的文件并输出。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200710090227XA CN101290571B (zh) | 2007-04-16 | 2007-04-16 | 一种生成可被动态装载执行的文件的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200710090227XA CN101290571B (zh) | 2007-04-16 | 2007-04-16 | 一种生成可被动态装载执行的文件的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101290571A CN101290571A (zh) | 2008-10-22 |
CN101290571B true CN101290571B (zh) | 2011-01-12 |
Family
ID=40034842
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200710090227XA Expired - Fee Related CN101290571B (zh) | 2007-04-16 | 2007-04-16 | 一种生成可被动态装载执行的文件的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101290571B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102508660A (zh) * | 2011-10-26 | 2012-06-20 | 青岛海信宽带多媒体技术有限公司 | 可执行文件的生成方法及生成装置 |
CN103246524A (zh) * | 2012-02-01 | 2013-08-14 | 上海野火网络科技有限公司 | 基于arm芯片的多个程序段同时运行的动态加载方法 |
CN105930151A (zh) * | 2016-04-15 | 2016-09-07 | 北京小米移动软件有限公司 | 应用程序的编译方法、装置及终端 |
CN106055933B (zh) * | 2016-06-24 | 2019-08-23 | 武汉斗鱼网络科技有限公司 | 一种客户端软件代码校验的方法及系统 |
CN106648751B (zh) * | 2016-11-22 | 2020-04-21 | 深圳市元征软件开发有限公司 | 一种嵌入式软件快速升级的方法及嵌入式设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6715142B1 (en) * | 1999-12-21 | 2004-03-30 | Fuji Xerox Co., Ltd. | Execution program generation method, execution program generation apparatus, execution program execution method, and computer-readable storage medium |
WO2003090021A3 (en) * | 2002-04-15 | 2004-05-21 | Core Sdi Inc | Security framework for protecting rights in computer software |
CN1527196A (zh) * | 2003-03-08 | 2004-09-08 | 深圳市中兴通讯股份有限公司上海第二 | 一种生成可执行程序的装置及方法 |
-
2007
- 2007-04-16 CN CN200710090227XA patent/CN101290571B/zh not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6715142B1 (en) * | 1999-12-21 | 2004-03-30 | Fuji Xerox Co., Ltd. | Execution program generation method, execution program generation apparatus, execution program execution method, and computer-readable storage medium |
WO2003090021A3 (en) * | 2002-04-15 | 2004-05-21 | Core Sdi Inc | Security framework for protecting rights in computer software |
CN1527196A (zh) * | 2003-03-08 | 2004-09-08 | 深圳市中兴通讯股份有限公司上海第二 | 一种生成可执行程序的装置及方法 |
Also Published As
Publication number | Publication date |
---|---|
CN101290571A (zh) | 2008-10-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101031409B1 (ko) | 동적으로 가상 머신을 생성하기 위한 방법, 제조물품 및 시스템 | |
US9207918B2 (en) | Firmware extension method and firmware builder | |
US8307379B2 (en) | Determining an extension to use to process an input object to a call in a program | |
US9639377B2 (en) | Method for linking and loading to protect applications | |
CN109614165B (zh) | 一种com组件的多版本并行运行方法和装置 | |
Zimmer et al. | Beyond BIOS: developing with the unified extensible firmware interface | |
CN100492294C (zh) | 程序动态加载方法 | |
CN101290571B (zh) | 一种生成可被动态装载执行的文件的方法 | |
KR20070049166A (ko) | 목표 기기 상에서의 종속 소프트웨어 패키지의 검출 및이용을 자동화하기 위한 방법 및 소프트웨어 리포지터리를생성하기 위한 시스템 | |
WO2016196338A1 (en) | On demand resources | |
TWI291098B (en) | Method and system for data optimization and protection in DSP firmware | |
CN106796521B (zh) | 独立于产品发布的api版本控制 | |
CN112130926B (zh) | 应用程序运行的方法、装置、终端设备及存储介质 | |
US10540193B2 (en) | Software-defined microservices | |
CN112445729A (zh) | 操作地址确定方法、PCIe系统、电子设备及存储介质 | |
Ki et al. | Reptor: Enabling api virtualization on android for platform openness | |
US20040153878A1 (en) | System and method for implementing a dynamic logger | |
CN111290740B (zh) | 应用程序的开发方法、装置、计算机设备和存储介质 | |
TWI501152B (zh) | 用於簡化具有動態程式庫的介面之方法 | |
US8146109B2 (en) | Version resiliency for a host application and custom code | |
Ruprecht et al. | Automatic feature selection in large-scale system-software product lines | |
CN102859512A (zh) | 可远程处理的项目 | |
US10521592B2 (en) | Application translocation | |
Lawall et al. | Tarantula: Killing driver bugs before they hatch | |
Posch | Hands-On Embedded Programming with C++ 17: Create versatile and robust embedded solutions for MCUs and RTOSes with modern C++ |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
C17 | Cessation of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20110112 Termination date: 20130416 |