一种加载ELF文件的方法和装置制造方法及图纸

技术编号:12674641 阅读:106 留言:0更新日期:2016-01-07 18:57
本发明专利技术提供了一种对具有可执行和链接格式(ELF)文件动态加载的方法和装置,其中方法包括:对所述ELF文件中的静态库文件进行解析以获取对象文件;从所述对象文件中提取有效段;加载有效段,并为所述对象文件中的对象及函数分别建立对象映射表和函数映射表,用于对加载的有效段中的对象及函数进行重定位。通过本发明专利技术所提供的ELF文件动态加载的方法和装置,可以摆脱现有技术中嵌入式系统在解析和加载ELF文件时需要依赖于特定的指令集,无法适用于全部的嵌入式处理器架构的困扰,实现了在特定处理器体系结构下能够同时运行多个ELF文件的应用,并且能够实现动态链接,大大减小了之前采用静态链接产生的文件体积,减小了功耗。

【技术实现步骤摘要】
【专利说明】一种加载ELF文件的方法和装置
本专利技术涉及计算机领域,尤其涉及一种加载ELF文件的方法和装置。 【
技术介绍
】 具有可执行和链接格式的ELF(ExecutableandLinkingFormat)是一种对象文 件的格式,用于定义不同类型的对象文件(Objectfiles)中的内容及其格式。由于现有的 嵌入式操作系统对于ELF文件的加载采用的是静态链接的方式生成可执行文件,并采用烧 录的方式将可执行文件直接烧录至内存(Flash)中,这些处理过程都必须在ARM指令集下 完成的,而有些处理器采用的并非ARM指令集,且不支持其所采用的指令集到ARM指令集的 切换,因此现有技术无法为此类处理器提供ELF文件的加载。 【
技术实现思路
】 本专利技术提出了一种加载ELF文件的方法和装置,以便于解决现有技术在一些嵌入 式系统中无法记载ELF文件的问题。 具体技术方案如下: -种加载具有可执行和链接格式ELF文件的方法,所述方法包括: 对所述ELF文件中的静态库文件进行解析以获取对象文件; 从所述对象文件中提取有效段; 加载有效段,并为所述对象文件中的对象及函数分别建立对象映射表和函数映射 表,用于对加载的有效段中的对象及函数进行重定位。 根据本专利技术一优选实施例,提取的有效段包括:可执行代码段、应用数据段或重定 位段。 根据本专利技术一优选实施例,根据所述对象文件的ELF文件头和段文件头表来提取 有效段。 根据本专利技术一优选实施例,所述加载有效段包括:将不同类型的有效段分别加载 到不同的区域。 根据本专利技术一优选实施例,所述将不同类型的有效段分别加载到不同的区域包 括: 依照可执行代码段及相应重定位段的段信息,对可执行代码段进行重定位,将重 定位后的可执行代码段写入Flash;或者 依照应用数据段及相应重定位段的段信息,将应用数据段直接加载到RAM。 根据本专利技术一优选实施例,所述段信息包括段序号、段偏移量或段大小。 根据本专利技术一优选实施例,所述可执行代码段包括.text段,所述应用数据段包 括?data段、?bss段、或?rodata段,所述重定位段包括?rel.data段、?rel.bss段、或?rel. rodata段。 根据本专利技术一优选实施例,在所述加载有效段之后,对所述对象文件的有效段进 行以下至少一个的标记:段的起始地址、段偏移量、段大小。 根据本专利技术一优选实施例,所述对象映射表的映射表项包括对象名称和对象地 址,所述对象地址是通过查找有效段中的导出对象,根据导出对象所在地址而得到的;所述 函数映射表的映射表项包括函数名称和函数地址,所述函数地址是通过查找有效段中的导 出函数,根据导出函数所在的地址而得到的。 根据本专利技术一优选实施例,在对有效段中的对象进行重定位时,利用当前对象在 所述对象映射表中的地址查找所述对象的跳转对象在文字池中的地址,并将文字池中所述 跳转对象的地址修改为当前对象的地址。 根据本专利技术一优选实施例,在对有效段中的函数进行重定位时,利用当前函数运 行时的地址以及从函数映射表中查找到的需要跳转到的函数地址,经过计算得到跳转指 令,利用计算得到的跳转指令对之前的跳转指令进行更新,以便于根据所述更新的跳转指 令跳转到即将要执行的函数地址。 -种加载ELF文件的装置,所述装置包括: 解析装置,用于对所述ELF文件中的静态库文件进行解析以获取对象文件; 提取装置,用于从所述对象文件中提取有效段; 加载装置,用于加载有效段,为所述对象文件中的对象及函数分别建立对象映射 表和函数映射表,并且用于对加载的有效段中的对象及函数进行重定位。 根据本专利技术一优选实施例,所述提取装置中提取的有效段包括:可执行代码段、应 用数据段或重定位段。 根据本专利技术一优选实施例,所述提取装置用于根据所述对象文件的ELF文件头和 段文件头表来提取有效段。 根据本专利技术一优选实施例,所述加载装置加载有效段包括:将不同类型的有效段 分别加载到不同的区域。 根据本专利技术一优选实施例,所述加载装置在将不同类型的有效段分别加载到不同 的区域时,具体执行: 依照可执行代码段及相应重定位段的段信息,对可执行代码段进行重定位,将重 定位后的可执行代码段写入Flash;或者 依照应用数据段及相应重定位段的段信息,将应用数据段直接加载到RAM。 根据本专利技术一优选实施例,所述段信息包括段序号、段偏移量或段大小。 根据本专利技术一优选实施例,所述可执行代码段包括.text段,所述应用数据段包 括?data段、?bss段、或?rodata段,所述重定位段包括?rel.data段、?rel.bss段、或?rel. rodata段。 根据本专利技术一优选实施例,所述加载装置在执行所述加载有效段之后,进一步用 于对所述对象文件的有效段进行以下至少一个的标记:段的起始地址、段偏移量、段大小。 根据本专利技术一优选实施例,所述对象映射表的映射表项包括对象名称和对象地 址,所述对象地址是通过查找有效段中的导出对象,根据导出对象所在地址而得到的;所述 函数映射表的映射表项包括函数名称和函数地址,所述函数地址是通过查找有效段中的导 出函数,根据导出函数所在的地址而得到的。 根据本专利技术一优选实施例,所述加载装置在对有效段中的对象进行重定位时,具 体执行: 利用当前对象在所述对象映射表中的地址查找所述对象的跳转对象在文字池中 的地址,并将文字池中所述跳转对象的地址修改为当前对象的地址。 根据本专利技术一优选实施例,所述加载装置在对有效段中的函数进行重定位时,具 体执行:利用当前函数运行时的地址以及从函数映射表中查找到的需要跳转到的函数地 址,经过计算得到跳转指令,利用计算得到的跳转指令对之前的跳转指令进行更新,以便于 根据所述更新的跳转指令跳转到即将要执行的函数地址。 由以上技术方案可以看出,本专利技术采用了解析静态库(.a)文件并且提取有效段, 对有效段进行加载,建立对象及函数映射表用于对可重定位段中的对象和函数分别进行重 定位的方式,这些处理方式并不受限于特定指令集,因此解决了现有技术在一些嵌入式系 统中无法加载ELF文件的问题。 【【附图说明】】 图1为本专利技术实施例提供的一种对ELF文件动态加载方法的流程示意图; 图2为本专利技术实施例提供的ELFHeader的格式示意图; 图3为本专利技术实施例提供的一种加载ELF文件的装置的结构示意图。 【【具体实施方式】】 为了使本专利技术的目的、技术方案和优点更加清楚,下面结合附图和具体实施例对 本专利技术进行详细描述。 请参考图1,图1为本专利技术提供的一种加载具有可执行和链接格式的ELF文件的方 法实施例的流程示意图。如图1所示,该流程包括: 101 :对ELF文件中的静态库(.a)文件进行解析以获取对象文件(.〇)。 本专利技术的对象文件(.〇)是以ELF格式保存的可重定向文件,对象文件中的内容可 以包含对各个函数的入口标记,描述,以形成机器可执行的指令。当程序要执行时还需要进 行链接(link),链接就是把多个.〇文件链成一个可执行文件。 ELF文件除了可以包含可重定位的对象文件外,还可以包含可执行的对象文件和 可被共享的对象文件,上述三种对象文件由于都可以以对象文件.〇的形式表示,而多个.〇 对象文件可以归档(archive)成.a静本文档来自技高网...

【技术保护点】
一种加载具有可执行和链接格式ELF文件的方法,其特征在于,所述方法包括:对所述ELF文件中的静态库文件进行解析以获取对象文件;从所述对象文件中提取有效段;加载有效段,并为所述对象文件中的对象及函数分别建立对象映射表和函数映射表,用于对加载的有效段中的对象及函数进行重定位。

【技术特征摘要】

【专利技术属性】
技术研发人员:秦松陈鑫位广军马家智桂敬文王博通王晓卿张洪卫常磊张治李新开
申请(专利权)人:安一恒通北京科技有限公司
类型:发明
国别省市:北京;11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1