本发明专利技术提供了一种对目标文件进行定位的方法和装置,本发明专利技术所述方法包括:在将目标文件加载到目标设备之前,对目标文件中的绝对地址进行重定位;在将所述目标文件加载到目标设备之后,对目标文件中的相对地址进行重定位,完成对目标文件重定位的全部过程。本发明专利技术所述装置包括:专用存储器、发布前处理机和目标文件重定位模块。利用本发明专利技术,可以大大地提高目标设备的内存利用率,降低对目标文件进行重定位系统的实现和维护的复杂度。
【技术实现步骤摘要】
本专利技术涉及计算机应用领域,尤其涉及一种对目标文件进行定位的方法和装置。
技术介绍
嵌入式系统是以计算机技术为基础,以应用为中心,并且软硬件可裁剪的专用计算机系统。嵌入式设备或者其他设备在实现动态模块或者在线补丁等功能的时候,通常需要将一个程序模块动态加载到目标设备上,这样就涉及到对目标文件进行动态重定位的问题。在计算机系统中目标文件是指程序模块的二进制表达形式,在目标文件没有和应用程序的其他模块一同构成可执行程序之前,它在内存中的位置是不固定的,其中包含的地址都是浮动地址。目标文件中的浮动地址包含相对地址和绝对地址两类。绝对地址是指和目标文件相关的应用程序的其他模块的地址,这类地址在应用程序的其他模块确定后,就可以确定。相对地址是指引用目标文件内部的地址,这类地址要在目标文件在内存中的位置确定以后才能确定。将目标文件和应用程序的其他模块结合在一起,并将目标文件指定到内存中的特定位置,并且将目标文件中的浮动地址修改为确定的内存地址,这一过程被称为目标文件的重定位。在重定位的过程中将生成最终的符号表和重定位表。符号表中包含目标文件所有的变量和函数的地址信息;重定位表中包含所有代码段中需要修改的位置信息。对目标文件的重定位过程可以由编译工具来完成。现有技术中对目标文件进行动态重定位的一种方法是将对目标文件的重定位过程全部放在目标设备上来进行,这种方法通常会在目标设备上生成一份庞大的符号表,记录每个符号的地址。比如如果每个符号占32个字节,1024个符号就要占用将近32K的内存。在实际应用中,很多设备上的数据远比这个例子中的数据大。因此,这种方法大大增加了目标设备的资源消耗。现有技术中对目标文件进行重定位的另一种方法是预重定位方法,该方法的基本原理如图1所示。其核心为先离线在维护客户端上对目标文件进行预重定位,确定目标文件在目标设备内存中的位置,然后直接把这个预重定位过的目标文件加载到目标设备中预先确定的位置。该方法的具体处理流程如图2所示,包括如下步骤步骤2-1、在目标设备的内存中保留一个专用区域。为防止目标文件的加载失败,在需要加载目标文件的目标设备的内存中保留一个专用区域,专门给动态加载的目标文件使用,也就是说,所有被加载的目标文件都被指定到这个专用区域。步骤2-2、在维护主机中建立目标设备的离线定位记录。在维护主机上离线建立需要加载目标文件的目标设备上全部与定位有关的信息记录,其中包括目标设备的符号表、内存使用情况、已经加载的每个目标文件的位置等信息。步骤2-3、维护客户端读取维护主机中的定位记录。在对目标文件进行重定位之前,先针对需要加载目标文件的目标设备设置一个维持客户端,并利用维护客户端读取步骤2-2所建立的维护主机中的定位记录。步骤2-4、维护客户端根据获得的定位记录对目标文件进行预重定位。维护客户端根据获得的定位记录对目标文件进行预重定位。即预先确定目标文件在目标设备的内存中的位置,其中包括对目标文件中的绝对地址和相对地址进行预重定位,即将目标文件中的绝对地址和相对地址修改为确定的内存地址。该预重定位过程将生成目标文件的符号表和重定位表。现在还没有现成的通用工具可以完成这种离线的预重定位过程,因此,该步骤只能由设计者编码来完成。步骤2-5、维护客户端将步骤2-4预先确定的目标文件在目标设备的内存中的位置,以及步骤2-4生成的目标文件的符号信息,写进维护主机中。步骤2-6、维护客户端将经过了预重定位的目标文件加载到目标设备中步骤2-4预先确定的位置,至此,目标文件的预重定位过程结束。上面所述预重定位方法的主要缺点为1、必须为每个目标设备配备一个维护主机,该维护主机离线维护一份目标设备的全部与定位有关的信息记录,维护成本较高。并且一旦离线记录与目标设备不一致,就会造成严重后果。举个例子,假设用一个维护客户端维护两个目标设备,其中一个设备P上已经加载了一个目标文件A,另一个设备Q上什么都没有加载,现在要对P加载目标文件B,但错误地使用了设备Q的定位记录,由于Q上没有目标文件A的信息,B就可能直接覆盖到A上,导致系统崩溃。要避免这种情况发生,需要作复杂的校验,代价较高;2、目标设备必需为目标文件在内存中预留位置,才能保证对目标文件的离线定位一定成功,大大降低了目标设备的内存的利用率。举个例子,假如离线定位设备把目标文件分配在A1这个位置,但这个位置在运行的时候已经被某个程序占有,目标文件的加载就会失败;3、该方法实现起来比较复杂,不能有效地利用已有的资源,没有现成的通用工具可以完成这种对目标文件的离线的重定位,整个离线重定位过程只能由设计者编码来完成。
技术实现思路
鉴于上述现有技术所存在的问题,本专利技术的目的是提供一种对目标文件进行定位的方法和装置,从而大大地提高了目标设备的内存利用率,降低了对目标文件进行重定位系统的实现和维护的复杂度。本专利技术的目的是通过以下技术方案实现的一种对目标文件进行定位的方法,包括A、在将目标文件加载到目标设备之前,对目标文件中的绝对地址进行重定位;B、在将所述目标文件加载到目标设备之后,对目标文件中的相对地址进行重定位,完成对目标文件重定位的全部过程。所述的步骤A进一步包括A1、建立目标设备的符号信息记录;A2、在将目标文件加载到目标设备之前,根据所述符号信息记录对目标文件中的绝对地址进行重定位。所述的步骤A1进一步包括离线建立包括目标设备所有全局变量和函数的地址信息的符号信息记录。所述的步骤A2进一步包括A21、根据所述目标设备的符号信息记录,获得和目标文件相关的应用程序的其他模块的地址;A22、在将目标文件加载到目标设备之前,根据获得的所述应用程序的其他模块的地址,对目标文件中的绝对地址进行重定位。所述的步骤B进一步包括在将所述目标文件加载到目标设备之后,根据目标文件在内存中的位置对目标文件中的相对地址进行重定位。一种对目标文件进行定位的装置,包括专用存储器用于建立包括目标设备所有变量和函数的地址信息的符号信息记录;发布前处理机用于读取专用存储器中的目标设备的符号信息记录,并根据该符号信息记录,对目标文件中的绝对地址进行重定位;目标文件重定位模块设置于目标设备中,用于实现目标文件的加载,并根据目标文件在内存中的位置,对加载的目标文件中的相对地址进行重定位。所述的目标设备可以为嵌入式系统。所述的发布前处理机可以通过链接器来实现。由上述本专利技术提供的技术方案可以看出,利用本专利技术所述方法,对目标文件的预处理可以在目标文件发布到目标设备前完成,不需要目标设备的最终用户干预;目标设备上不需要为目标文件预留空间,大大地提高了目标设备的内存利用率;对目标文件的发布前处理在大部分系统中可以直接使用现有编译器来完成,降低了对目标文件进行重定位系统的实现和维护的复杂度。附图说明图1为现有技术中预重定位方法的基本原理图;图2现有技术中预重定位方法的具体处理流程图;图3为本专利技术所述装置的结构图;图4为本专利技术所述方法的基本原理图;图5本专利技术所述方法的具体处理流程图。具体实施例方式本专利技术提供了一种对目标文件进行定位的方法和装置,本专利技术的核心为在给一个特定目标设备加载目标文件前,先对目标文件进行部分预定位,即只对目标文件中的绝对地址进行重定位,目标文件中的相对地址的定位则延迟到目标文件本文档来自技高网...
【技术保护点】
一种对目标文件进行定位的方法,其特征在于,包括:A、在将目标文件加载到目标设备之前,对目标文件中的绝对地址进行重定位;B、在将所述目标文件加载到目标设备之后,对目标文件中的相对地址进行重定位,完成对目标文件重定位的全部过程。
【技术特征摘要】
【专利技术属性】
技术研发人员:李国柱,
申请(专利权)人:华为技术有限公司,
类型:发明
国别省市:94[中国|深圳]
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。