CN1841329A - 对目标文件进行定位的方法和装置 - Google Patents
对目标文件进行定位的方法和装置 Download PDFInfo
- Publication number
- CN1841329A CN1841329A CN 200510059346 CN200510059346A CN1841329A CN 1841329 A CN1841329 A CN 1841329A CN 200510059346 CN200510059346 CN 200510059346 CN 200510059346 A CN200510059346 A CN 200510059346A CN 1841329 A CN1841329 A CN 1841329A
- Authority
- CN
- China
- Prior art keywords
- file destination
- target device
- address
- reorientation
- carried out
- 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.)
- Granted
Links
Images
Abstract
本发明提供了一种对目标文件进行定位的方法和装置,本发明所述方法包括:在将目标文件加载到目标设备之前,对目标文件中的绝对地址进行重定位;在将所述目标文件加载到目标设备之后,对目标文件中的相对地址进行重定位,完成对目标文件重定位的全部过程。本发明所述装置包括:专用存储器、发布前处理机和目标文件重定位模块。利用本发明,可以大大地提高目标设备的内存利用率,降低对目标文件进行重定位系统的实现和维护的复杂度。
Description
技术领域
本发明涉及计算机应用领域,尤其涉及一种对目标文件进行定位的方法和装置。
背景技术
嵌入式系统是以计算机技术为基础,以应用为中心,并且软硬件可裁剪的专用计算机系统。嵌入式设备或者其他设备在实现动态模块或者在线补丁等功能的时候,通常需要将一个程序模块动态加载到目标设备上,这样就涉及到对目标文件进行动态重定位的问题。
在计算机系统中目标文件是指程序模块的二进制表达形式,在目标文件没有和应用程序的其他模块一同构成可执行程序之前,它在内存中的位置是不固定的,其中包含的地址都是浮动地址。目标文件中的浮动地址包含相对地址和绝对地址两类。绝对地址是指和目标文件相关的应用程序的其他模块的地址,这类地址在应用程序的其他模块确定后,就可以确定。相对地址是指引用目标文件内部的地址,这类地址要在目标文件在内存中的位置确定以后才能确定。
将目标文件和应用程序的其他模块结合在一起,并将目标文件指定到内存中的特定位置,并且将目标文件中的浮动地址修改为确定的内存地址,这一过程被称为目标文件的重定位。在重定位的过程中将生成最终的符号表和重定位表。符号表中包含目标文件所有的变量和函数的地址信息;重定位表中包含所有代码段中需要修改的位置信息。对目标文件的重定位过程可以由编译工具来完成。
现有技术中对目标文件进行动态重定位的一种方法是:将对目标文件的重定位过程全部放在目标设备上来进行,这种方法通常会在目标设备上生成一份庞大的符号表,记录每个符号的地址。比如:如果每个符号占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本发明所述方法的具体处理流程图。
具体实施方式
本发明提供了一种对目标文件进行定位的方法和装置,本发明的核心为:在给一个特定目标设备加载目标文件前,先对目标文件进行部分预定位,即只对目标文件中的绝对地址进行重定位,目标文件中的相对地址的定位则延迟到目标文件被加载到目标设备上之后完成。
本发明所述装置的结构图如图3所示,包括:
专用存储器:用于建立包括目标设备所有变量和函数的地址信息的符号信息记录。
本发明所述装置中的专用存储器是采用在目标设备之外离线的方式来实现。
发布前处理机:用于读取专用存储器中的目标设备的符号信息记录,并根据该符号信息记录,对目标文件中的绝对地址进行重定位。
本发明中的发布前处理机可以利用一些现成的通用工具来实现,在很多系统上可以直接通过编译工具本身的功能来实现。例如可以利用在嵌入式领域中广泛使用的gnu编译工具,只要在Id script中描述需要绝对定位的符号的地址,然后用-r参数重新链接一次,即可完成。
目标文件重定位模块:设置于目标设备中,用于配合发布前处理机实现目标文件的加载,并确定目标文件在内存中的位置,并根据目标文件在内存中的位置,对加载的目标文件中的相对地址进行重定位。
本发明所述装置中的目标设备可以为嵌入式系统。
下面我们结合附图来详细描述本发明所述方法,本发明所述方法的原理如图4所示。其基本原理为:
在专用存储器中离线维持一份包括目标设备全部函数和变量的地址信息的符号信息记录。在将目标文件加载到特定目标设备前,先对目标文件进行部分预定位,即在发布前处理机上根据目标设备的离线符号信息记录,对目标文件的绝对地址进行重定位,然后将进行了部分预定位的目标文件加载到特定目标设备上,在特定目标设备上完成对目标文件相对地址的定位,从而完成对目标文件进行重定位的全过程。
本发明所述方法的具体处理流程如图5所示,包括如下步骤:
步骤5-1、在专用存储器中离线建立目标设备的符号信息记录。
在专用存储器上离线建立包括需要加载目标文件的目标设备全部函数和变量的地址信息的符号信息记录,其中包括需要加载目标文件的目标设备的符号表。
步骤5-2、发布前处理机读取专用存储器中的符号信息记录。
在对目标文件进行重定位之前,先针对需要加载目标文件的目标设备设置一个发布前处理机,并利用发布前处理机读取步骤4-1所建立的专用存储器中的目标设备符号信息记录。
步骤5-3、发布前处理机根据获得的符号信息记录对目标文件的绝对地址进行重定位。
发布前处理机根据获得的目标设备符号信息记录对目标文件进行部分预定位,只对目标文件的绝对地址进行预定位。即根据目标设备符号信息记录获取和目标文件相关的应用程序的其他模块的地址,进而确定目标文件中绝对地址在目标设备的内存中的位置,并将目标文件中的绝对地址修改为确定的内存地址。
步骤5-4、发布前处理机将进行了部分预定位的目标文件加载到目标设备上。
发布前处理机将进行了部分预定位过的目标文件加载到目标设备上,并通过目标设备中的目标文件重定位模块确定目标文件在内存中的位置。
步骤5-5、在目标设备上对目标文件的相对地址进行重定位。
根据目标文件在内存中的位置,通过目标设备中的目标文件重定位模块完成对目标文件的相对地址的重定位,既将目标文件中的相对地址修改为确定的内存地址,至此,对目标文件的重定位过程结束。
如果目标文件间要使用对方的符号信息,可以在目标文件加载到目标设备后,保留其中的符号以便在目标端重定位。由于这个符号本来就在目标文件中,并不会加重目标设备的负担。
至此,本发明所述方法的具体处理流程结束。
综上所说,利用本发明所述方法,可以大大地提高目标设备的内存利用率,并且可以有效地利用现有资源,降低了对目标文件进行重定位系统的实现和维护的复杂度。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。
Claims (8)
1、一种对目标文件进行定位的方法,其特征在于,包括:
A、在将目标文件加载到目标设备之前,对目标文件中的绝对地址进行重定位;
B、在将所述目标文件加载到目标设备之后,对目标文件中的相对地址进行重定位,完成对目标文件重定位的全部过程。
2、根据权利要求1所述对目标文件进行定位的方法,其特征在于,所述的步骤A进一步包括:
A1、建立目标设备的符号信息记录;
A2、在将目标文件加载到目标设备之前,根据所述符号信息记录对目标文件中的绝对地址进行重定位。
3、根据权利要求2所述对目标文件进行定位的方法,其特征在于,所述的步骤A1进一步包括:
离线建立包括目标设备所有全局变量和函数的地址信息的符号信息记录。
4、根据权利要求2所述对目标文件进行定位的方法,其特征在于,所述的步骤A2进一步包括:
A21、根据所述目标设备的符号信息记录,获得和目标文件相关的应用程序的其他模块的地址;
A22、在将目标文件加载到目标设备之前,根据获得的所述应用程序的其他模块的地址,对目标文件中的绝对地址进行重定位。
5、根据权利要求1、2、3或4所述对目标文件进行定位的方法,其特征在于,所述的步骤B进一步包括:
在将所述目标文件加载到目标设备之后,根据目标文件在内存中的位置对目标文件中的相对地址进行重定位。
6、一种对目标文件进行定位的装置,其特征在于,包括:
专用存储器:用于建立包括目标设备所有变量和函数的地址信息的符号信息记录;
发布前处理机:用于读取专用存储器中的目标设备的符号信息记录,并根据该符号信息记录,对目标文件中的绝对地址进行重定位;
目标文件重定位模块:设置于目标设备中,用于实现目标文件的加载,并根据目标文件在内存中的位置,对加载的目标文件中的相对地址进行重定位。
7、根据权利要求6所述对目标文件进行定位的装置,其特征在于,所述的目标设备可以为嵌入式系统。
8、根据权利要求6或7所述对目标文件进行定位的装置,其特征在于,所述的发布前处理机可以通过链接器来实现。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB200510059346XA CN100489781C (zh) | 2005-03-28 | 2005-03-28 | 对目标文件进行定位的方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB200510059346XA CN100489781C (zh) | 2005-03-28 | 2005-03-28 | 对目标文件进行定位的方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1841329A true CN1841329A (zh) | 2006-10-04 |
CN100489781C CN100489781C (zh) | 2009-05-20 |
Family
ID=37030368
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB200510059346XA Expired - Fee Related CN100489781C (zh) | 2005-03-28 | 2005-03-28 | 对目标文件进行定位的方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100489781C (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2010148724A1 (zh) * | 2009-11-20 | 2010-12-29 | 中兴通讯股份有限公司 | 一种加载及调试方法及相应的调试系统 |
CN101661397B (zh) * | 2008-08-29 | 2012-09-12 | 宇龙计算机通信科技(深圳)有限公司 | 实现程序动态加载的方法和生成映射文件的方法及设备 |
CN102982277A (zh) * | 2012-12-24 | 2013-03-20 | 广东威创视讯科技股份有限公司 | 一种实现嵌入式系统软件补丁的方法和系统 |
WO2014019367A1 (zh) * | 2012-07-30 | 2014-02-06 | 华为技术有限公司 | 多级存储的重部署方法及装置 |
CN110765027A (zh) * | 2019-12-27 | 2020-02-07 | 中国人民解放军国防科技大学 | 一种pe文件地址定位系统 |
WO2022237610A1 (zh) * | 2021-05-10 | 2022-11-17 | 阿里巴巴(中国)有限公司 | 程序编译和程序加载方法 |
-
2005
- 2005-03-28 CN CNB200510059346XA patent/CN100489781C/zh not_active Expired - Fee Related
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101661397B (zh) * | 2008-08-29 | 2012-09-12 | 宇龙计算机通信科技(深圳)有限公司 | 实现程序动态加载的方法和生成映射文件的方法及设备 |
WO2010148724A1 (zh) * | 2009-11-20 | 2010-12-29 | 中兴通讯股份有限公司 | 一种加载及调试方法及相应的调试系统 |
EP2503457A1 (en) * | 2009-11-20 | 2012-09-26 | ZTE Corporation | Loading and debugging method and debugging system thereof |
EP2503457A4 (en) * | 2009-11-20 | 2013-07-31 | Zte Corp | LOADING AND DEBUGGING METHOD AND DEBUGGING SYSTEM THEREOF |
US9086899B2 (en) | 2009-11-20 | 2015-07-21 | Zte Corporation | Loading and debugging method and debugging system thereof |
WO2014019367A1 (zh) * | 2012-07-30 | 2014-02-06 | 华为技术有限公司 | 多级存储的重部署方法及装置 |
CN102982277A (zh) * | 2012-12-24 | 2013-03-20 | 广东威创视讯科技股份有限公司 | 一种实现嵌入式系统软件补丁的方法和系统 |
CN110765027A (zh) * | 2019-12-27 | 2020-02-07 | 中国人民解放军国防科技大学 | 一种pe文件地址定位系统 |
CN110765027B (zh) * | 2019-12-27 | 2020-04-10 | 中国人民解放军国防科技大学 | 一种pe文件地址定位系统 |
WO2022237610A1 (zh) * | 2021-05-10 | 2022-11-17 | 阿里巴巴(中国)有限公司 | 程序编译和程序加载方法 |
Also Published As
Publication number | Publication date |
---|---|
CN100489781C (zh) | 2009-05-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1230744C (zh) | 一种嵌入式系统软件补丁的实现和控制方法 | |
CN1841329A (zh) | 对目标文件进行定位的方法和装置 | |
CN1700136A (zh) | 处理器扩展和软件验证 | |
CN105868028B (zh) | 一种进程间共享数据的方法、装置及终端 | |
CN1499530A (zh) | 非易失性存储器系统内有效允许失序写处理的方法和装置 | |
CN1924815A (zh) | 用于在子上下文之间控制存储器访问的装置、系统和方法 | |
CN1920780A (zh) | 访问临界区的方法和系统 | |
CN101038611A (zh) | 一种软件保护的方法 | |
CN101042673A (zh) | 软件测试系统及测试方法 | |
CN1287281C (zh) | 单线程代码到推测预执行启用代码的变换 | |
CN1933647A (zh) | 外部存储器管理装置和外部存储器管理方法 | |
CN1641587A (zh) | 用于改进爪哇虚拟机性能的方法和系统 | |
CN101038531A (zh) | 用于嵌入式系统中部件的共用接口 | |
CN1766883A (zh) | 基于秘密模式来切换要访问的文件夹的方法及计算机系统 | |
CN1869999A (zh) | 一种实现计算机的开机保护方法及装置 | |
CN1504881A (zh) | 爪哇执行设备和爪哇执行方法 | |
CN1851635A (zh) | 对廉价磁盘冗余阵列进行读写操作的方法和系统 | |
CN103593298A (zh) | 内存回收方法和装置 | |
CN1828557A (zh) | 嵌入式操作系统中进程映射实现方法 | |
CN101046724A (zh) | 磁盘接口处理器以及磁盘操作命令的处理方法 | |
CN1295600C (zh) | Windows程序异常捕获及定位方法 | |
CN1893282A (zh) | 一跨序列排序涡轮码系统和其操作方法 | |
CN1975693A (zh) | 具有自驱动功能的指令仿真解析系统及其实现方法 | |
US20200327052A1 (en) | Compiling application with multiple function implementations for garbage collection | |
CN1260656C (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 | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20090520 Termination date: 20170328 |