重定位表恢复方法、设备及存储介质技术

技术编号:37354157 阅读:12 留言:0更新日期:2023-04-27 07:04
本申请实施例提供一种重定位表恢复方法、设备及存储介质。在本申请实施例中,通过对可执行文件的代码段进行反汇编,得到可执行文件的代码段的汇编代码;之后,可根据汇编代码中的基于指定代码位置对应的相对寻址指令,恢复可执行文件的重定位表。通过对可执行文件进行静态分析,可恢复可执行文件的重定位表,有助于后续对可执行文件对应的应用进行布局优化。于后续对可执行文件对应的应用进行布局优化。于后续对可执行文件对应的应用进行布局优化。

【技术实现步骤摘要】
重定位表恢复方法、设备及存储介质


[0001]本申请涉及计算机
,尤其涉及一种重定位表恢复方法、设备及存储介质。

技术介绍

[0002]应用程序(Application,APP)是以可执行文件的格式进行发布。计算机设备在安装应用程序时,计算机设备的操作系统可加载应用程序的可执行文件至本地。为了降低对计算机设备的内存占用,在应用程序发布时,一般会删除可执行文件中的部分重定位表项。
[0003]在对应用程序进行软件优化时,重定位表信息可用于对应用程序的可执行文件的布局优化。但是,删除的部分重定位表项无疑在一定程度上限制了应用程序的优化空间。因此,如何恢复可执行文件的重定位表,成为本领域技术人员亟待解决的技术问题。

技术实现思路

[0004]本申请的多个方面提供一种重定位表恢复方法、设备及存储介质,用以恢复可执行文件的重定位表。
[0005]本申请实施例提供一种重定位表恢复方法,包括:
[0006]获取可执行文件的代码段;
[0007]对代码段进行反汇编操作,以得到所述代码段对应的汇编代码;
[0008]从所述汇编代码中,获取基于指定代码位置的相对寻址指令;
[0009]根据所述基于指定代码位置的相对寻址指令,恢复所述可执行文件的重定位表。
[0010]本申请实施例还提供一种重定位表恢复方法,包括:
[0011]将可执行文件加载至内存中;
[0012]从子进程的虚拟地址空间中,确定存储所述可执行文件的代码段的内存地址空间对应的第一虚拟地址空间;
[0013]调用管控子进程的父进程将所述可执行文件的代码段,从所述第一虚拟地址空间移动至所述子进程的第二虚拟地址空间;
[0014]将所述第一虚拟地址空间的访问权限设置为读保护;
[0015]调用所述子进程运行所述可执行文件,在所述子进程访问到所述第一虚拟地址空间的情况下,产生保护异常,以供所述父进程监测到所述保护异常;
[0016]调用所述父进程根据发生所述保护异常时的程序指令位置和所述程序指令位置对指向的目标指令,恢复所述可执行文件的重定位表。
[0017]本申请实施例还提供一种计算设备,包括:存储器和处理器;其中,所述存储器,用于存储计算机程序;
[0018]所述处理器耦合至所述存储器,用于执行所述计算机程序以用于执行上述各重定位表恢复中的步骤。
[0019]本申请实施例还提供一种存储有计算机指令的计算机可读存储介质,当所述计算机指令被一个或多个处理器执行时,致使所述一个或多个处理器执行执行上述各重定位表
恢复中的步骤。
[0020]在本申请实施例中,通过对可执行文件的代码段进行反汇编,得到可执行文件的代码段的汇编代码;之后,可根据汇编代码中的基于指定代码位置对应的相对寻址指令,恢复可执行文件的重定位表。通过对可执行文件进行静态分析,可恢复可执行文件的重定位表,有助于后续对可执行文件对应的应用进行布局优化。
附图说明
[0021]此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
[0022]图1为本申请实施例提供的重定位表恢复方法的流程示意图;
[0023]图2为本申请实施例提供的可执行文件的格式示意图;
[0024]图3为本申请实施例提供的另一重定位表恢复方法的流程示意图;
[0025]图4为本申请实施例提供的又一重定位表恢复方法的流程示意图;
[0026]图5为上述图4提供的重定位表恢复方法的过程示意图;
[0027]图6为本申请实施例提供的计算设备的结构示意图。
具体实施方式
[0028]为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
[0029]在本申请一些实施例中,为了恢复可执行文件的重定位表,通过对可执行文件的代码段进行反汇编,得到可执行文件的代码段的汇编代码;之后,可根据汇编代码中的基于指定代码位置对应的相对寻址指令,恢复可执行文件的重定位表。通过对可执行文件进行静态分析,可恢复可执行文件的重定位表,有助于后续对可执行文件对应的应用进行布局优化。
[0030]以下结合附图,详细说明本申请各实施例提供的技术方案。
[0031]应注意到:相同的标号在下面的附图以及实施例中表示同一物体,因此,一旦某一物体在一个附图或实施例中被定义,则在随后的附图和实施例中不需要对其进行进一步讨论。
[0032]图1为本申请实施例提供的重定位表恢复方法的流程示意图。如图1所示,该重定位恢复方法主要包括:
[0033]101、获取可执行文件的代码段。
[0034]102、对可执行文件的代码段进行反汇编操作,以得到代码段对应的汇编代码。
[0035]103、从汇编代码中,获取基于指定代码位置的相对寻址指令。
[0036]104、根据基于指定代码位置的相对寻址指令,恢复可执行文件的重定位表。
[0037]在本实施例中,可执行文件(Executable File)是指可由操作系统进行加载执行的文件。可执行文件可为可执行可链接格式(Executable Linkable Format,ELF)文件或可移植的可执行(Portable Executable,PE)文件等。
[0038]在软件开发过程中,需要将应用对应的源代码经过编译为目标文件;目标文件经过链接器和链接库链接生成的可执行文件;之后发布应用的可执行文件。具体地,可将应用对应的源代码编译为汇编语言;进一步,可将汇编语言翻译为目标机器语言,以得到目标文件,即可执行文件。下面结合图2示出的ELF文件,对可执行文件的格式进行示例性说明。
[0039]如图2所示,ELF文件可包括:ELF表头(ELF Header)、程序头表(Program Header Table)、节头表(Section Header Table)及由程序表头表述的程序段和节表头描述的节(Sections)。其中,ELF表头主要用于存储文件元数据,这些元数据用于描述ELF文件的其它部分。程序表头用于描述ELF的程序段;节表头用于表示描述ELF的节。其中,ELF文件的节可包括以下部分:
[0040].text:代码段,用于存储ELF文件的代码段;
[0041].rodata:只读数据段,用于存储ELF文件的只读数据;
[0042].data:数据段,用于存储ELF文件中已初始化的全局C变量;
[0043].bss:用于存储未初始化或初始化为0的全局变量和静态变量等;
[0044].symtab:符号本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种重定位表恢复方法,其特征在于,包括:获取可执行文件的代码段;对所述代码段进行反汇编操作,以得到所述代码段对应的汇编代码;从所述汇编代码中,获取基于指定代码位置的相对寻址指令;根据所述基于指定代码位置的相对寻址指令,恢复所述可执行文件的重定位表。2.根据权利要求1所述的方法,其特征在于,所述根据所述基于指定代码位置的相对寻址指令,恢复所述可执行文件的重定位表,包括:确定所述基于指定代码位置的相对寻址指令对应的重定位表项的重定位地址和重定位符号;确定所述基于指定代码位置的相对寻址指令的相对寻址方式对应的重定位类型,为所述基于指定代码位置的相对寻址指令对应的重定位表项的重定位类型;根据所述基于指定代码位置的相对寻址指令对应的重定位表项的重定位地址、重定位符号和重定位类型,恢复所述基于指定代码位置对应的相对寻址指令的重定位表项。3.根据权利要求2所述的方法,其特征在于,所述确定所述基于指定代码位置的相对寻址指令对应的重定位表项的重定位地址和重定位符号,包括:从所述基于指定代码位置的相对寻址指令中,获取所述基于指定代码位置的相对寻址指令的基地址;根据所述基于指定代码位置的相对寻址指令,确定所述基于指定代码位置的相对寻址指令的操作数与所述基地址之间的偏移;根据所述基地址和所述偏移,确定所述操作数的地址信息,作为所述重定位地址;在所述可执行文件的符号表中查找所述操作数的地址信息对应的字符,作为所述重定位字符。4.根据权利要求1所述的方法,其特征在于,所述可执行文件的代码段为非位置无关代码;所述方法还包括:从可执行文件的符号表中,获取所述可执行文件的函数名符号;运行所述可执行文件,并在所述可执行文件运行过程中,获取处理器的最后跳转记录集合;根据所述最后跳转记录集合、所述函数名符号和所述符号表,恢复所述可执行文件的重定位表。5.根据权利要求4所述的方法,其特征在于,所述根据所述最后跳转记录集合和所述函数名符号,恢复所述可执行文件的重定位表,包括:从所述符号表中,获取所述最后跳转记录集合中的最后跳转记录的源地址的字符和目的地址的字符;针对目的地址的字符存在于所述函数名符号中的第一最后跳转记录,根据所述第一最后跳转记录的源地址和目的地址,恢复所述第一最后跳转记录的源地址指向的第一目标指令的重定位表项。6.根据权利要求5所述的方法,其特征在于,所述根据所述第一最后跳转记录的源地址和目的地址,恢复所述第一最后跳转记录的源地址指向的第一目标指令的重定位表项,包括:
确定所述第一最后跳转记录的源地址,为所述第一目标指令的重定位表项的重定位地址;确定所述第一最后跳转记录的目的地址对应的符号,为所述第一目标指令的重定位表项的重定位符号;根据所述第一目标指令的寻址方式和所述第一目标指令的操作类型,确定所述第一目标指令的重定位表项的重定位类型;根据所述第一目标指令对应的重定位表项的重定位地址、重定位符号及重定位类型,恢复所述第一目标指令对应的重定位表项。7.根据权利要求5所述的方法,其特征在于,还包括:针对目的地址的字符未存在于所述函数名符号的第二最后跳转记录,从所述汇编代码中,确定所述第二最后跳转记录的源地址指向的第二目标指令;根据所述第二目标指令的操作类型和寻址方式,恢复所述第二目标指令对应的重定位表项。8.根据权利要求7所述的方法,其特征在于,所述根据所述第二目标指令的操作类型和寻址方式,恢复所述第二目标指令对应的重定位表项,包括:根据所述第二目标指令的操作类型和寻址方式,确定所述第二目标指令的操作数的地址信息,作为第二目标指令对应的重定位表项中的重定位地址;从所述符号表中,获取所述第二目标指令的操作数的地址信息对应的符号,作为所述第二目标指令对应的重定位表项中的重定位符号;根据所述第二目标指令对应的寻址方式和操作类型,确定所述第二目标指令对应的重...

【专利技术属性】
技术研发人员:林沐晖
申请(专利权)人:阿里云计算有限公司
类型:发明
国别省市:

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

1