一种生成可被动态装载执行的文件的方法

文档序号:6574760阅读:362来源:国知局
专利名称:一种生成可被动态装载执行的文件的方法
技术领域
本发明涉及一种生成可被动态装载执行的文件的方法。
背景技术
在当前的软件技术中,特别是桌面软件领域,系统软件与应用程序软件 是分开的。在一个系统软件之上有众多的应用程序软件,这些应用程序可以 很方便的安装,升级或者被替换甚至被删除掉。这些应用软件以及他们所依 赖的动态链接库之所以能被系统程序动态的装载运行,是因为这些应用软件 和动态链接库所使用的链接器能够提供足够的重定位信息告诉系统程序来如 何装载与重定位他们。
反观嵌入式领域,最常见的做法是系统程序与应用程序被链接成一个整 体,然后被"嵌入"到设备的存储器中,如果想更新某个小应用程序,只能 整个全部更新,而要想在设备已经提供给用户的情况下再给用户继续提供新 的应用程序是不可能的。
为了打破在嵌入式领域的这种限制,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,全部重定位完成以后,系统即可以开始执行被 装载的文件的代码。以上仅为用于说明本发明的一个实施方式,并非对本发明的限定,在不 脱离本发明的技术思想范围内,还可以对各组成元素进行变更。即,只要是 基于本发明思想的其它变形方式都在本发明的保护范围之内。
权利要求
1、一种生成可被动态装载执行的文件的方法,其特征在于,包含输入步骤,用于输入大小相同的第一可执行文件和第二可执行文件,在链接时,所述第一可执行文件和所述第二可执行文件所使用的输入文件以及除了装载地址以外的所有其它链接选项都相同;重定位数据生成步骤,用于根据所述输入步骤提供的所述第一可执行文件和所述第二可执行文件,从文件的头部开始比较两者所对应的相同地址的数据大小,如果大小不同,则记录所述地址值,直至文件的结束,同时记录所述重定位数据的个数,所述记录的地址值组成所述重定位数据;输出步骤,根据所述重定位数据生成步骤中生成的所述重定位数据的个数和所述重定位数据以及所述第一可执行文件或所述第二可执行文件,生成所述可被动态装载执行的文件并输出。
全文摘要
本发明提供一种生成可被动态装载执行的文件的方法,包含输入步骤、重定位数据生成步骤、以及输出步骤。本发明可以在任何的编译环境或系统下获得重定位数据,从而生成可被动态装载执行的文件,尤其在封闭的嵌入式平台上,可以很容易将系统软件与应用程序分离开来,从而提供一种灵活的可替换升级以及增加额外应用程序的途径。既方便了用户,也为软件开发商提供了新的机会。
文档编号G06F9/44GK101290571SQ20071009022
公开日2008年10月22日 申请日期2007年4月16日 优先权日2007年4月16日
发明者阮建辉 申请人:阮建辉
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1