CN115700470A - 文件加载的处理方法和装置,计算机存储介质和电子设备 - Google Patents

文件加载的处理方法和装置,计算机存储介质和电子设备 Download PDF

Info

Publication number
CN115700470A
CN115700470A CN202110830816.7A CN202110830816A CN115700470A CN 115700470 A CN115700470 A CN 115700470A CN 202110830816 A CN202110830816 A CN 202110830816A CN 115700470 A CN115700470 A CN 115700470A
Authority
CN
China
Prior art keywords
executable file
information
file
address information
compiling
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.)
Pending
Application number
CN202110830816.7A
Other languages
English (en)
Inventor
朱卿
黄震
万国建
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Alibaba Cloud Computing Ltd
Original Assignee
Alibaba Cloud Computing Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Alibaba Cloud Computing Ltd filed Critical Alibaba Cloud Computing Ltd
Priority to CN202110830816.7A priority Critical patent/CN115700470A/zh
Publication of CN115700470A publication Critical patent/CN115700470A/zh
Pending legal-status Critical Current

Links

Images

Landscapes

  • Stored Programmes (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本申请公开一种文件加载的处理方法和装置,计算机存储介质和电子设备,其中所述处理方法包括:对源代码文件进行编译链接预处理,生成位置无关的动态可执行文件,其中,所述动态可执行文件包括加载时进行位置无关重定位的重定位信息;根据获取的所述动态可执行文件的偏移信息和所述重定位信息中描述所述动态可执行文件的编译地址信息,确定用于对所述动态可执行文件进行重定位时待修改编译地址信息;将所述待修改编译地址信息修改为分配的运行地址信息;根据所述运行地址信息对所述动态可执行文件进行加载;从而能够避免重定位信息过多而导致的加载过程复杂的问题。

Description

文件加载的处理方法和装置,计算机存储介质和电子设备
技术领域
本申请涉及计算机应用技术,具体涉及一种文件加载的处理方法和装置。本申请同时涉及一种计算机存储介质和电子设备。
背景技术
程序需要在硬件上运行,需要经过将文本形式源代码翻译为机器语言形式的目标文件,之后将目标文件通过库文件进行组织形成最终生成可执行文件,再由操作系统的加载代码对可执行文件进行加载处理,最终通过处理器在终端上运行。
在嵌入式操作系统中,存在需要加载多bin文件(二进制文件)或者多进程的场景。通常多个bin文件之间的可执行地址空间需要人为划分,并且要避免地址空间相互之间的冲突问题;故此需要按照实际多个进程或者app的大小,来调整进程使用ld(链接脚本文件)的地址空间避免地址间互相冲突。尤其在进程不独占整个4G(32位)空间,或者没有类似ARMCortex-A系列的MMU虚拟地址映射的情况下,因此,需要解决地址空间的划分分配问题。然而在通过人为划分进程的地址空间时存在非常多的问题,例如:容易导致地址重叠问题;划分不符合实际需求;在进程未加载的情况下,占用的空间也无法释放给其他进程使用等。
发明内容
本申请提供一种文件加载的处理方法,以解决现有技术中加载过程复杂的问题。
本申请提供一种文件加载的处理方法,包括:
对源代码文件进行编译链接预处理,生成位置无关的动态可执行文件,其中,所述动态可执行文件包括加载时进行位置无关重定位的重定位信息;
根据获取的所述动态可执行文件的偏移信息和所述重定位信息中描述所述动态可执行文件的编译地址信息,确定用于对所述动态可执行文件进行重定位时待修改编译地址信息;
将所述待修改编译地址信息修改为分配的运行地址信息;
根据所述运行地址信息对所述动态可执行文件进行加载。
在一些实施例中,所述对源代码文件进行编译链接预处理,生成位置无关的动态可执行文件,包括:
获取所述源代码文件;
对所述源代码文件的编译链接选项中位置无关参数进行设置,生成包括位置无关的第一格式类型可执行文件;
根据所述第一格式类型可执行文件,生成所述位置无关的动态可执行文件。
在一些实施例中,所述根据所述第一格式类型可执行文件,生成所述位置无关的动态可执行文件,包括:
根据所述第一格式类型可执行文件的解析,生成位置无关的第二格式类型的动态可执行文件;
或者,
根据所述第一格式类型可执行文件,生成位置无关的第一格式类型的动态可执行文件。
在一些实施例中,所述根据所述第一格式类型可执行文件的解析,生成位置无关的第二格式类型的动态可执行文件,包括:
提取所述第一格式类型可执行文件中全局偏移表重定位信息和数据段重定位信息;其中,所述全局偏移表用于存放所述动态可执行文件中符号的跳转编译地址信息;
提取所述第一格式类型可执行文件中存放的属于第二格式类型的可执行文件的信息;
将所述全局偏移表重定位信息和所述数据段重定位信息作为文件头部与提取的所述第二格式类型的可执行文件的信息进行合并,生成位置无关的第二格式类型的动态可执行文件。
在一些实施例中,所述根据获取的所述动态可执行文件的偏移信息和所述重定位信息中描述所述动态可执行文件的编译地址信息,确定用于对所述动态可执行文件进行重定位时待修改编译地址信息,包括:
获取所述重定位信息中全局偏移表重定位信息的全局偏移表编译地址信息;
根据分配给所述动态可执行文件的运行地址,获取相对于所述全局偏移表编译地址信息的偏移信息;
根据所述偏移信息和所述全局偏移表编译地址信息,确定用于对所述动态可执行文件进行重定位时待修改跳转编译地址信息。
在一些实施例中,所述根据获取的所述动态可执行文件的偏移信息和所述重定位信息中描述所述动态可执行文件的编译地址信息,确定用于对所述动态可执行文件进行重定位时待修改编译地址信息,包括:
获取所述数据段重定位信息中的数据段编译地址信息;
根据分配给所述动态可执行文件的运行地址,获取相对于所述数据段编译地址信息的数据段偏移信息;
根据所述数据段偏移信息和所述动态可执行文件中所述数据段编译地址信息,确定用于对所述动态可执行文件进行重定位时所述数据段中待修改绝对访问编译地址信息。
在一些实施例中,所述将所述重定位信息中的所述编译地址信息修改为所述运行地址信息,包括:
根据所述重定位信息中全局偏移表重定位参数,将所述待修改跳转编译地址信息修改为所述运行地址信息;
根据所述重定位信息中数据段重定位参数,将所述待修改绝对访问编译地址信息修改为所述运行地址信息。
本申请还提供一种文件加载的处理装置,包括:
生成单元,用于对源代码文件进行编译链接预处理,生成位置无关的动态可执行文件,其中,所述动态可执行文件包括加载时进行位置无关重定位的重定位信息;
确定单元,用于根据获取的所述动态可执行文件的偏移信息和所述重定位信息中描述所述动态可执行文件的编译地址信息,确定用于对所述动态可执行文件进行重定位的运行地址信息;
修改单元,用于将所述重定位信息中的所述编译地址信息修改为所述运行地址信息;
加载单元,用于根据所述运行地址信息对所述动态可执行文件进行加载。
本申请还提供一种计算机存储介质,用于存储网络平台产生数据,以及对应所述网络平台产生数据进行处理的程序;
所述程序在被处理器读取执行时,执行如上述的文件加载的处理方法的步骤。
本申请还提供一种电子设备,包括:
处理器;
存储器,用于存储对网络平台产生数据进行处理的程序,所述程序在被所述处理器读取执行时,执行如上述的文件加载的处理方法的步骤。
与现有技术相比,本申请具有以下优点:
本申请提供的一种文件加载的处理方法实施例通过对源代码文件的编译链接预处理中设置位置无关参数,生成为位置无关的动态可执行文件,通过对重定位信息的修改实现可执行文件的动态加载过程。因此本实施例一方面因为位置无关的动态可执行文件中编译地址信息可以任意指定,在实际运行加载时进行重定位,将编译地址修改为运行地址即可,而修改仅需要考虑较少重定位信息,在本实施例中,可以是对GOT表中存放编译地址信息的修改,另外对数据段等绝对地址信息的修改,所以不需要修改原始所有的重定位信息,以及不需要修改代码段二进制数据等,大量减少重定位信息,从而能够避免重定位信息过多而导致的加载过程复杂的问题;另一方面,本实施例中,动态可执行文件可以选取dyn.bin文件,相比ELF文件极大降低加载文件版本的占用空间;再一方面,因为本实施例中的重定位信息包括全局偏移表的重定位、数据段的重定位,不涉及代码段的重定位信息,即无需修改代码段的位置信息,进而可以将代码段存放到Flash中直接执行,即支持XIP(eXecute In Place:芯片内执行)。
附图说明
图1是本申请提供的一种文件加载的处理方法实施例的流程图;
图2是本申请提供的一种文件加载的处理方法实施例中编译链接处理的逻辑框图;
图3是本申请提供的一种文件加载的处理方法实施例中加载处理的逻辑框图;
图4是本申请提供的一种文件加载的处理装置实施例的结构示意图;
图5是本申请提供的一种电子设备实施例的结构示意图。
具体实施方式
在下面的描述中阐述了很多具体细节以便于充分理解本申请。但是本申请能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本申请内涵的情况下做类似推广,因此本申请不受下面公开的具体实施的限制。
本申请中使用的术语是仅仅出于对特定实施例描述的目的,而非旨在限制本申请。在本申请中和所附权利要求书中所使用的描述方式例如:“一种”、“第一”、和“第二”等,并非对数量上的限定或先后顺序上的限定,而是用来将同一类型的信息彼此区分。
结合上述背景技术可知,对于进程加载需要以人工划分的静态划分方式实现地址空间的分配,然而,静态划分方式会为加载过程开来诸多弊端,故此,动态划分方式以一种优于静态划分方式而出现。下面分别描述一下现有技术中静态划分和动态划分的优缺点。
静态划分(静态加载):多进程场景下,被加载进程独占4G的虚拟地址空间时,进程本身运行的虚拟地址可直接使用编译时的虚拟地址,并不会存在和其他进程的冲突,如linux使用的进程空间;但是当被加载进程不独享4G的虚拟空间时,或者需要和其他进程共享虚拟地址空间时,多个进程之间的虚拟地址空间不能冲突,因此每个进程使用的虚拟地址空间需要分配开;当进程比较少的时候,使用的虚拟地址空间可以采用人为划分;但是当进程比较多的时候,人工划分进程空间的显然无法满足需求。从使用效率上来讲,静态划分进程空间后,即使某个进程暂不被加载,其占用的虚拟地址空间也不能被其他进程动态使用。
动态划分(动态加载):非MMU(内存管理单元)或其他不独占4G虚拟地址空间的场景下多bin、多进程的动态加载方案,同时支持ARM Cortex-A系列和M系列;M系列情况下,由于没有页表转换,进程间的地址空间通过动态加载技术实现。现有动态加载是通过对待重定位.o或.a(未链接静态库)进行动态加载过程,需要对目标文件进行大量的重定位处理,例如代码段、数据段等因此重定位的处理复杂度较高,且不支持XIP(即:代码段存放在Flash闪存中执行)。例如:RT-thread上层APP动态加载方案和linux进程动态加载方案。其中,RT-thread内没有进程的概念,但是其实现了纯粹用户APP的动态加载方案,实现了未链接静态库(.o或.a)的加载方式,但是存在的问题是,重定位类型多,依赖大量符号表信息、处理过程复杂,不支持XIP等。linux进程动态加载方案中使用基础bin+so(动态库)的方式加载进程和使用未链接静态库.o的方式插入模块ko(内核模块),同样也存在上述问题。故此,本申请提供一种文件加载的处理方法,能够减小对文件进行重定位的类型,降低处理复杂度。下面具体描述。
如图1所示,图1是本申请提供的一种文件加载的处理方法实施例的流程图,所述处理方法包括:
步骤S101:对源代码文件进行编译链接预处理,生成位置无关的动态可执行文件,其中,所述动态可执行文件包括加载时进行位置无关重定位的重定位信息;
所述步骤S101中所述源代码文件可以是.c或.cpp;也可以是其他编程语言生成的源代码文件。对所述源代码文件的编译链接预处理可以包括:编译预处理和链接预处理,其中,编译预处理可以是设置编译选项参数,链接预处理可以是设置链接选项参数。可以理解为对源代码文件先进行编译预处理,具体为设置位置无关的编译参数,获得目标文件(.o),在对目标文件(.o)进行链接预处理,具体为设置位置无关链接参数,获得位置无关的动态可执行文件。
在本实施例中,编译选项参数的设置可以包括:fPIE:位置无关设置;mpic-register=r9:使用R9作为位置无关寄存器;msingle-pic-base:汇编时避免使用位置无关寄存器(如R9);mno-pic-data-is-text-relative:避免使用PC作为位置无关寄存器;所述链接选项参数的设置可以包括:nostartfiles:链接的时候不使用标准系统的启动文件;nodefaultlibs:链接的时候不使用标准系统库;nostdlib:链接的时候不使用标准的系统启动文件和系统库;emit-relocs:即使链接完,也要保留重定位信息,用于解析;pic-veneer:链接器会插入ARM\THUBM跳转桩,设定其为位置无关。所述位置无关可以理解为待加载可执行文件的起始运行地址可以变化的,对可执行文件的整体二进制内部的调用不受起始地址的影响。
请结合图1参考图2所示,图2是本申请提供的一种文件加载的处理方法实施例中编译链接处理的逻辑框图。
所述步骤S101的具体实现过程可以包括:
步骤S101-1:获取所述源代码文件;
在操作系统中,从源代码文件到可执行文件是需要将高级语言转换为低级别的机器语言,方能够在终端设备上运行相应的程序。
步骤S101-2:对所述源代码文件编译链接选项中位置无关参数进行设置,生成包括位置无关的第一格式类型可执行文件;编译链接选项中位置无关参数的设置如上述编译选项参数和连接选项参数的描述,此处不再重复赘述,本实施例中,可以对编译选项中的位置无关参数进行设置,也可以对链接选项中位置无关参数进行设置。
在本实施例中,所述第一格式类型的可执行文件可以是ELF格式文件,ELF(Executable and Linking Format)是一种对象文件的格式,用于定义不同类型的对象文件(Object files)中存放什么格式类型的数据。ELF可执行文件除了机器码外,还包括其它额外的信息,如段的加载地址,运行地址,重定位表,符号表等。
步骤S101-3:根据所述第一格式类型可执行文件,生成所述位置无关的动态可执行文件。
在本实施例中,位置无关可以是编译地址的位置无关信息,可以包括表征全局偏移表段位置(GOT表:global offset table)的编译地址信息,即:全局偏移表编译地址信息;以及表征数据段位置的编译地址信息,即:数据段编译地址信息,当然也可以包括代码段的编译地址信息,也就是,编译地址信息可以是各个段的编译地址信息。所述全局偏移表中可以存放符号的跳转编译地址信息等,所述数据段中可以存放绝对访问编译地址信息等。
需要说明的是,第一格式类型可执行文件可以是ELF格式的文件,在所述第一格式类型可执行文件中可以包括第二格式类型的可执行文件,例如:可以是BIN格式的文件。当第二格式类型的可执行文件独立存在时,与第一格式类型的可执行文件二者不同之处在于,ELF文件相对于BIN还包括头部(head)信息,以及除代码段和数据段以外的其他信息。本实施例中,ELF文件中包括BIN文件,当从ELF文件提取BIN文件,可以提取除数据段、代码段等信息外还包括GOT表(全局偏移表),用于存放动态可执行文件中符号的跳转编译地址信息,所述符号可以是变量,函数等。所述动态可执行文件可以是ELF格式的可执行文件也可以是BIN格式的可执行文件,后续会分别进行描述。
生成所述位置无关的动态可执行文件可以包括两种格式类型,第一种格式类型可以是ELF(Dyn.elf),第二种格式类型可以是BIN(Dyn.bin);在本实施例中所述步骤S101-3的具体实现过程可以包括至少两种方式,下面分别进行描述:
方式一:根据所述第一格式类型可执行文件的解析,生成位置无关的第二格式类型的动态可执行文件;
方式二:根据所述第一格式类型可执行文件,生成位置无关的第一格式类型的动态可执行文件。
在本实施例中,方式一的实现过程可以包括:
提取所述第一格式类型可执行文件中全局偏移表重定位信息和数据段重定位信息;其中,所述全局偏移表用于存放所述动态可执行文件中符号的跳转编译地址信息;
提取所述第一格式类型可执行文件中存放的属于第二格式类型的可执行文件的信息;
将所述全局偏移表重定位信息和所述数据段重定位信息作为文件头部与提取的所述第二格式类型的可执行文件的信息进行合并,生成位置无关的第二格式类型的动态可执行文件。
其中,所述第二格式类型的可执行文件的信息可以包括:数据段、代码段和全局偏移表等。生成所述位置无关的第二格式类型的动态可执行文件,即Dyn.bin。也就是说,所述第二格式类型的动态可执行文件中包括头部信息、段信息(数据段和GOT表段);其中,头部信息为从所述第一格式类型可执行文件提取重定位信息,如数据段的重定位和GOT表的重定位信息,在本实施例中通过第一格式类型可执行文件(ELF)中GOT表所在段的地址信息获取建立GOT表索引,通过GOT表索引确定动态可执行文件中GOT表的位置。所述位置无关的第二格式类型的动态可执行文件中的GOT表用于存放所述符号的跳转编译地址信息。
第二种方式:根据所述第一格式类型可执行文件,生成位置无关的第一格式类型的动态可执行文件;当第一格式类型可执行文件为ELF可执行文件时,通常ELF可执行文件中包括有第二格式类型BIN可执行文件的内容,如代码段、数据段,GOT表等等,因此,可以直接通过第一格式类型可执行文件生成位置无关的第一格式类型的动态可执行文件,即Dyn.elf。
以上是对位置无关的动态可执行文件生成两种方式的描述,需要说明的是,在本实施例中,主要以第一种方式为主,即根据编译链接预处理生成的第一格式类型的可执行文件提取位置无关的重定位信息(包括全局偏移表重定位信息和数据段重定位信息)和段信息(数据段和GOT表段)等,从而生成位置无关的第二格式类型的动态可执行文件,从而能够去除ELF格式可执行文件中与动态加载无关的其他信息,位置无关的第二格式类型的动态可执行文件中保留与动态加载相关的段信息,例如:GOT表索引信息(确定GOT表的位置)和数据段重定位信息(可以看做Dyn.bin中的头部信息),以及代码段、数据段和GOT表。而重定位信息中涉及内容包括:R_ARM_GOT_BREL、R_ARM_ABS32和R_ARM_TARGET1,其中R_ARM_GOT_BREL重定位类型可以理解为对GOT表内存放的编译地址的重定位,即修改GOT表内编译地址;R_ARM_ABS32重定位类型可以理解为对于32位操作系统,修改数据段内存放有绝对访问地址的实际运行绝对地址,即可以重定位到4G地址空间的任何位置;R_ARM_TARGET1可以理解为修改数据段内存放有绝对访问地址的实际运行绝对地址,主要为如存放有函数指针绝对地址的列表,主要为函数指针的位置修改。
方式一在运行加载阶段不再依赖ELF可执行文件,仅在本地链接打包时提取ELF可执行文件的重定位的相关信息,进而能够降低加载版本空间占用率,并且降低位置无关的动态可执行文件生成的复杂性,以及降低后续动态加载的复杂性。
可以理解的是,上述重定位信息中仅设置GOT表的重定位和数据段位置的重定位,进而能够支持XIP。
步骤S102:根据获取的所述动态可执行文件的偏移信息和所述重定位信息中描述所述动态可执行文件的编译地址信息,确定用于对所述动态可执行文件进行重定位时待修改编译地址信息;
基于上述步骤S101中的描述,本实施例中,以动态可执行文件可以是Dyn.bin为例进行描述,即BIN格式类型的动态可执行文件。所述动态可执行文件中包括来自ELF文件中的GOT表重定位信息和数据段重定位信息,以及属于BIN文件格式类型的代码段、数据段和GOT表等信息。动态可执行文件中包括有重定位信息,将动态可执行文件烧录到内存空间后,操作系统分配给所述动态可执行文件的运行地址与编译地址会发生变化,为保证进程的正常运行,需要将动态可执行文件中的编译地址修改为运行地址,故此需要获得存储位置偏移。因此步骤S102具体实现过程可以包括:
步骤S102-11:获取所述重定位信息中全局偏移表重定位信息的全局偏移表编译地址信息;本实施例中,所述全局偏移表编译地址信息的获取可以根据动态可执行文件中头部存放的GOT表索引来确定GOT表的编译地址信息。
步骤S102-12:根据分配给所述动态可执行文件的运行地址,获取相对于所述全局偏移表编译地址的偏移信息;本实施例中,所述运行地址通常为操作系统随机分配的地址,运行地址与全局偏移表编译地址之差即为偏移信息。
步骤S102-13:根据所述偏移信息和所述全局偏移表编译地址信息,确定用于对所述动态可执行文件进行重定位时待修改跳转地址信息;本实施例中,所述待修改跳转地址信息可以根据全局偏移表编译地址+位置偏移量确定。
还可以包括:
步骤S102-14:获取所述数据段重定位信息中的数据段编译地址信息;
步骤S102-15:根据分配给所述动态可执行文件的运行地址,获取相对于所述数据段编译地址信息的数据段偏移信息;基于上述步骤S101-4中的描述,重定位信息中可以包括全局偏移表编译地址的重定位类型,还包括数据段编译地址重定位类型。
步骤S102-16:根据所述数据段偏移信息和所述动态可执行文件中所述数据段编译地址信息,确定用于对所述动态可执行文件进行重定位时所述数据段中待修改绝对访问编译地址信息。本实施例中,可以根据所述数据段偏移信息和所述动态可执行文件中所述数据段编译地址信息,确定数据段本身的目标位置;根据数据段本身的目标位置和数据段重定位的索引,确定待修改绝对访问编译地址信息。如果所述数据段中需要对所有变量符号等绝对访问编译地址进行修改,则可以直接根据所述数据段的位置确定即可。所述待修改绝对访问编译地址信息可以根据数据段编译地址信息+位置偏移量进行修改。
步骤S103:将所述待修改编译地址信息修改为分配的运行地址信息;
所述步骤S103的具体实现过程可以包括:
步骤S103-1:根据所述重定位信息中全局偏移表重定位参数,将所述待修改跳转编译地址信息修改为所述运行地址信息;本实施例中,根据所述重定位信息中的全局偏移表重定位类型,将全局偏移表中存放的符号访问时的跳转编译地址信息修改为所述运行地址信息,即:将R_ARM_GOT_BREL重定位类型进行修改,具体地修改所述GOT表(全局偏移表)中的跳转编译地址信息;修改具体可以是将跳转编译地址信息+偏移信息修改运行地址。
步骤S103-2:根据所述重定位信息中数据段重定位参数,将所述待修改绝对访问编译地址信息修改为所述运行地址信息;本实施例中,根据所述重定位信息中数据段重定位类型,将数据段重定位索引指向数据段中待修改绝对访问编译地址。
步骤S104:根据所述运行地址信息对所述动态可执行文件进行加载;
所述步骤S104的具体加载过程可以参考图3所示,所述动态可执行文件会被烧录到ROM或FLASH中,或者通过文件系统来存储读取。进程加载程序会将所述动态可执行文件读取到内存RAM空间内,并为其分配运行阶段的实际运行起始地址,并分析和进行重定位,完成可执行文件的加载。
可以理解的是,所述动态可执行文件的加载可以是包括多个动态可执行文件,或者多进程的加载,每个进程可以需要进行编译预处理,即对位置无关的相关参数进行设置。
需要说明的是,如图3所示,对于编译地址信息的修改可以是在动态可执行文件读取到内存之前已完成修改,后续记载直接拷贝加载段即可。或者,在动态可执行文件读取到内存之后在进行修改,修改后进行加载段拷贝。对于编译地址信息的修改时机没有限制,能够满足加载段拷贝到运行地址,保证进程的正常运行即可。
上述是针对本申请提供的一种文件加载的处理方法实施例的描述,该处理方法通过对源代码文件预先在编译链接预处理中设置位置无关参数,生成位置无关的动态可执行文件,通过对重定位信息的修改实现可执行文件的动态加载过程。因此本实施例一方面因为位置无关的动态可执行文件中编译地址可以任意指定,在实际运行加载时进行重定位,将编译地址修改为运行地址即可,而修改仅需要考虑较少的重定位信息,在本实施例中,可以是对GOT表中存放编译地址信息的修改,另外对数据段中的部分信息进行修改,所以重定位信息可以包括编译地址、数据段等信息的重定位,大量减少重定位信息,从而能够避免重定位信息过多而导致的加载过程复杂的问题;另一方面,本实施例中,动态可执行文件可以选取dyn.bin文件,相比ELF文件极大降低加载文件版本的占用空间;再一方面,因为本实施例中的重定位信息包括编译地址、数据段的重定位,不涉及代码段的重定位信息,即无需修改代码段的位置信息,进而可以将代码段存放到Flash中直接执行,即支持XIP(eXecute InPlace:芯片内执行)。
以上是对本申请提供的一种文件加载的处理方法实施例的具体描述,与前述提供的一种文件加载的处理方法实施例相对应,本申请还公开一种文件加载的处理装置实施例,请参看图4,由于装置实施例基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。下述描述的装置实施例仅仅是示意性的。
如图4所示,所述文件加载的处理装置实施例包括:
生成单元401,用于对源代码文件进行编译链接预处理,生成位置无关的动态可执行文件,其中,所述动态可执行文件包括加载时进行位置无关重定位的重定位信息;
所述生成单元401包括:获取子单元、设置子单元和生成子单元;
其中,所述获取子单元,用于获取所述源代码文件;
所述设置子单元,用于对所述源代码文件的编译链接选项中位置无关参数进行设置,生成包括位置无关的第一格式类型可执行文件;
所述生成子单元,用于根据所述第一格式类型可执行文件,生成所述位置无关的动态可执行文件。具体可以包括:根据所述第一格式类型可执行文件的解析,生成位置无关的第二格式类型的动态可执行文件;或者,根据所述第一格式类型可执行文件,生成位置无关的第一格式类型的动态可执行文件。
当所述生成子单元用于根据所述第一格式类型可执行文件,生成位置无关的第二格式类型的动态可执行文件时,可以包括:第一提取子单元和第二提取子单元,所述第一提取子单元,用于提取所述第一格式类型可执行文件中全局偏移表重定位信息和数据段重定位信息,其中,所述全局偏移表用于存放所述动态可执行文件中符号的跳转编译地址信息;所述第二提取子单元,用于提取所述第一格式类型可执行文件中存放的属于第二格式类型的可执行文件的信息;其中,所述全局偏移表用于存放所述动态可执行文件的位置无关的编译地址信息;所述生成子单元具体用于将所述全局偏移表重定位信息和所述数据段重定位信息作为文件头部与提取的所述第二格式类型的可执行文件的信息进行合并,生成位置无关的第二格式类型的动态可执行文件。
关于生成单元401的具体内容可以参考上述步骤S101的描述,此处不再重复赘述。
确定单元402,用于根据获取的所述动态可执行文件的偏移信息和所述重定位信息中描述所述动态可执行文件的编译地址信息,确定用于对所述动态可执行文件进行重定位时待修改编译地址信息;
所述确定单元402可以包括:表地址获取子单元,表偏移获取子单元和表修改确定子单元;
所述表地址获取子单元,用于获取所述重定位信息中全局偏移表重定位信息的全局偏移表编译地址信息;
所述表偏移获取子单元,用于根据分配给所述动态可执行文件的运行地址信息,获取相对于所述全局偏移表编译地址的偏移信息;
所述表修改确定子单元,用于根据所述偏移信息和所述全局偏移表编译地址信息,确定用于对所述动态可执行文件进行重定位时待修改跳转编译地址信息。
所述确定单元402还可以包括:数据段地址获取子单元,数据段偏移获取子单元和数据段修改确定子单元;
所述数据段地址获取子单元,用于获取所述数据段重定位信息中的数据段编译地址信息;
所述数据段偏移获取子单元,用于根据分配给所述动态可执行文件的运行地址,获取相对于所述数据段编译地址信息的数据段偏移信息;
所述数据段修改确定子单元,用于根据所述数据段偏移信息和所述动态可执行文件中所述数据段编译地址信息,确定用于对所述动态可执行文件进行重定位时所述数据段中待修改绝对访问编译地址信息。
关于确定单元402的具体内容可以参考上述步骤S102的描述,此处不再重复赘述。
修改单元403,用于将所述重定位信息中的所述编译地址信息修改为所述运行地址信息;
所述修改单元403可以包括:第一修改子单元和第二修改子单元;
所述第一修改子单元,用于根据所述重定位信息中全局偏移表重定位参数,将所述待修改跳转编译地址信息修改为所述运行地址信息;具体可以是,根据所述重定位信息中的全局偏移表重定位类型,将全局偏移表中存放的符号对应的待修改跳转编译地址信息修改为所述运行地址信息。
所述第二修改子单元,用于根据所述重定位信息中数据段重定位参数,将所述待修改绝对访问编译地址信息修改为所述运行地址信息;具体可以是,根据所述重定位信息中数据段重定位类型,将数据段指向符号的绝对访问编译地址修改为所述运行地址信息。
关于修改单元403的具体内容可以参考上述步骤S103的描述,此处不再重复赘述。
加载单元404,用于根据所述运行地址信息对所述动态可执行文件进行加载;关于加载单元404的具体内容可以参考上述步骤S104的描述,此处不再重复赘述。
基于上述内容,本申请还提供一种计算机存储介质,用于存储网络平台产生数据,以及对应所述网络平台产生数据进行处理的程序;
所述程序在被处理器读取执行时,执行如上所述的文件加载的处理方法的步骤。
基于上述内容,本申请还提供一种电子设备,如图5所示,所述电子设备实施例包括:
处理器501;
存储器502,用于存储对网络平台产生数据进行处理的程序,所述程序在被所述处理器读取执行时,执行如上所述的文件加载的处理方法的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
1、计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
2、本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请虽然以较佳实施例公开如上,但其并不是用来限定本申请,任何本领域技术人员在不脱离本申请的精神和范围内,都可以做出可能的变动和修改,因此本申请的保护范围应当以本申请权利要求所界定的范围为准。

Claims (10)

1.一种文件加载的处理方法,其特征在于,包括:
对源代码文件进行编译链接预处理,生成位置无关的动态可执行文件,其中,所述动态可执行文件包括加载时进行位置无关重定位的重定位信息;
根据获取的所述动态可执行文件的偏移信息和所述重定位信息中描述所述动态可执行文件的编译地址信息,确定用于对所述动态可执行文件进行重定位时待修改编译地址信息;
将所述待修改编译地址信息修改为分配的运行地址信息;
根据所述运行地址信息对所述动态可执行文件进行加载。
2.根据权利要求1所述的文件加载的处理方法,其特征在于,所述对源代码文件进行编译链接预处理,生成位置无关的动态可执行文件,包括:
获取所述源代码文件;
对所述源代码文件的编译链接选项中位置无关参数进行设置,生成包括位置无关的第一格式类型可执行文件;
根据所述第一格式类型可执行文件,生成所述位置无关的动态可执行文件。
3.根据权利要求2所述的文件加载的处理方法,其特征在于,所述根据所述第一格式类型可执行文件,生成所述位置无关的动态可执行文件,包括:
根据所述第一格式类型可执行文件的解析,生成位置无关的第二格式类型的动态可执行文件;
或者,
根据所述第一格式类型可执行文件,生成位置无关的第一格式类型的动态可执行文件。
4.根据权利要求3所述的文件加载的处理方法,其特征在于,所述根据所述第一格式类型可执行文件的解析,生成位置无关的第二格式类型的动态可执行文件,包括:
提取所述第一格式类型可执行文件中全局偏移表重定位信息和数据段重定位信息;其中,所述全局偏移表用于存放所述动态可执行文件中符号的跳转编译地址信息;
提取所述第一格式类型可执行文件中存放的属于第二格式类型的可执行文件的信息;
将所述全局偏移表重定位信息和所述数据段重定位信息作为文件头部与提取的所述第二格式类型的可执行文件的信息进行合并,生成位置无关的第二格式类型的动态可执行文件。
5.根据权利要求1所述的文件加载的处理方法,其特征在于,所述根据获取的所述动态可执行文件的偏移信息和所述重定位信息中描述所述动态可执行文件的编译地址信息,确定用于对所述动态可执行文件进行重定位时待修改编译地址信息,包括:
获取所述重定位信息中全局偏移表重定位信息的全局偏移表编译地址信息;
根据分配给所述动态可执行文件的运行地址,获取相对于所述全局偏移表编译地址信息的偏移信息;
根据所述偏移信息和所述全局偏移表编译地址信息,确定用于对所述动态可执行文件进行重定位时待修改跳转编译地址信息。
6.根据权利要求5所述的文件加载的处理方法,其特征在于,所述根据获取的所述动态可执行文件的偏移信息和所述重定位信息中描述所述动态可执行文件的编译地址信息,确定用于对所述动态可执行文件进行重定位时待修改编译地址信息,包括:
获取所述数据段重定位信息中的数据段编译地址信息;
根据分配给所述动态可执行文件的运行地址,获取相对于所述数据段编译地址信息的数据段偏移信息;
根据所述数据段偏移信息和所述动态可执行文件中所述数据段编译地址信息,确定用于对所述动态可执行文件进行重定位时所述数据段中待修改绝对访问编译地址信息。
7.根据权利要求6所述的文件加载的处理方法,其特征在于,所述将所述重定位信息中的所述编译地址信息修改为所述运行地址信息,包括:
根据所述重定位信息中全局偏移表重定位参数,将所述待修改跳转编译地址信息修改为所述运行地址信息;
根据所述重定位信息中数据段重定位参数,将所述待修改绝对访问编译地址信息修改为所述运行地址信息。
8.一种文件加载的处理装置,其特征在于,包括:
生成单元,用于对源代码文件进行编译链接预处理,生成位置无关的动态可执行文件,其中,所述动态可执行文件包括加载时进行位置无关重定位的重定位信息;
确定单元,用于根据获取的所述动态可执行文件的偏移信息和所述重定位信息中描述所述动态可执行文件的编译地址信息,确定用于对所述动态可执行文件进行重定位的运行地址信息;
修改单元,用于将所述重定位信息中的所述编译地址信息修改为所述运行地址信息;
加载单元,用于根据所述运行地址信息对所述动态可执行文件进行加载。
9.一种计算机存储介质,用于存储网络平台产生数据,以及对应所述网络平台产生数据进行处理的程序;
所述程序在被处理器读取执行时,执行如上述权利要求1-7任意一项所述的文件加载的处理方法的步骤。
10.一种电子设备,包括:
处理器;
存储器,用于存储对网络平台产生数据进行处理的程序,所述程序在被所述处理器读取执行时,执行如上述权利要求1-7任意一项所述的文件加载的处理方法的步骤。
CN202110830816.7A 2021-07-22 2021-07-22 文件加载的处理方法和装置,计算机存储介质和电子设备 Pending CN115700470A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110830816.7A CN115700470A (zh) 2021-07-22 2021-07-22 文件加载的处理方法和装置,计算机存储介质和电子设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110830816.7A CN115700470A (zh) 2021-07-22 2021-07-22 文件加载的处理方法和装置,计算机存储介质和电子设备

Publications (1)

Publication Number Publication Date
CN115700470A true CN115700470A (zh) 2023-02-07

Family

ID=85120844

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110830816.7A Pending CN115700470A (zh) 2021-07-22 2021-07-22 文件加载的处理方法和装置,计算机存储介质和电子设备

Country Status (1)

Country Link
CN (1) CN115700470A (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116700840A (zh) * 2023-08-03 2023-09-05 北京中电华大电子设计有限责任公司 文件执行方法、装置、电子设备及可读存储介质
CN116909656A (zh) * 2023-09-14 2023-10-20 北京中天星控科技开发有限公司 一种基于elf文件实现嵌入式动态APP加载的方法

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116700840A (zh) * 2023-08-03 2023-09-05 北京中电华大电子设计有限责任公司 文件执行方法、装置、电子设备及可读存储介质
CN116700840B (zh) * 2023-08-03 2023-09-26 北京中电华大电子设计有限责任公司 文件执行方法、装置、电子设备及可读存储介质
CN116909656A (zh) * 2023-09-14 2023-10-20 北京中天星控科技开发有限公司 一种基于elf文件实现嵌入式动态APP加载的方法
CN116909656B (zh) * 2023-09-14 2023-12-08 北京中天星控科技开发有限公司 一种基于elf文件实现嵌入式动态APP加载的方法

Similar Documents

Publication Publication Date Title
KR100518584B1 (ko) 공유 라이브러리 시스템 및 상기 시스템 구축 방법
EP2487585B1 (en) Method and device for dynamically loading relocatable file
CN107291480B (zh) 一种函数调用方法及装置
US7793272B2 (en) Method and apparatus for combined execution of native code and target code during program code conversion
US9436457B2 (en) Generating and applying patches to computer program code concurrently with its execution
US7913243B2 (en) Method and system for generating and applying patches to a computer program concurrently with its execution
CN111124550B (zh) 一种程序动态加载方法、装置及存储介质
US20070132774A1 (en) System and method for a patch minimization tool
US20160321089A1 (en) Binary file generation
JPH0836488A (ja) ダイナミック・パッチングを使用するランタイム・エラー・チェック方法と装置
CN115700470A (zh) 文件加载的处理方法和装置,计算机存储介质和电子设备
CN114816417B (zh) 一种交叉编译方法、装置、计算设备及存储介质
CN111399990A (zh) 解释执行智能合约指令的方法及装置
US5764991A (en) Processing object oriented code and virtual function code
US6175935B1 (en) Software debugging method and recording medium to which debugging program has been recorded
CN110659088B (zh) 一种嵌入式环境下程序扩展的方法及系统
JP2000010790A (ja) グロ―バル衝突判定用のユニタリデ―タ構造体のシステム、方法及びコンピュ―タプログラム製品
US9411566B2 (en) System and method for removal of arraycopies in java by cutting the length of arrays
KR100478463B1 (ko) 응용 프로그램의 동적링크 방법
CN106897588B (zh) 一种标签函数的处理方法及装置
JP2000010791A (ja) グロ―バルレジスタを初期化するための方法、コンピュ―タプログラム製品及び装置
CN108874468B (zh) 应用程序的加载方法、装置、计算机设备及存储介质
CN115167862A (zh) 补丁方法及相关设备
CN111913762A (zh) 一种预留运行内存空间的dsp动态加载方法
WO2006131695A1 (en) Method and apparatus for combined execution of native code and target code during program code conversion

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination