可执行文件处理方法和设备技术

技术编号:30632491 阅读:26 留言:0更新日期:2021-11-04 00:03
本申请提供一种可执行文件处理方法和设备,其中,该方法包括:获取与可执行文件对应的重定位表格,其中,重定位表格用于指示至少一个待修正偏移量的指令;根据重定位表格,确定待修正偏移量的指令在可执行文件中的位置,并确定待修正偏移量的指令所对应的实例成员;修正实例成员的偏移量。用于编译实例成员的指令进行修正了,减小了代码的开销,也减少了应用程序占用的内存空间和存储空间。程序占用的内存空间和存储空间。程序占用的内存空间和存储空间。

【技术实现步骤摘要】
可执行文件处理方法和设备


[0001]本申请涉及终端技术,尤其涉及一种可执行文件处理方法和设备。

技术介绍

[0002]可以在电子设备中布置有系统和各种应用程序。电子设备中所布置的应用程序的代码,常常包括多个类;并且,系统的代码中,通常包括多个类。
[0003]提供系统或应用程序的设备,会对应用程序的代码中的类进行调整或者对系统的代码中的类进行调整;在调整类的时候,会对与类相关的实例成员的布局造成影响。从而,在对系统或应用程序进行安装时,需要修正类中的实例成员的偏移量。
[0004]然而如何为快速、准确的修正实例成员的偏移量,是一个需要解决的问题。

技术实现思路

[0005]本申请提供一种可执行文件处理方法和设备,以解决快速、准确的修正实例成员的偏移量的问题。
[0006]第一方面,本申请提供一种可执行文件处理方法,应用于电子设备,所述方法包括:
[0007]获取与可执行文件对应的重定位表格,其中,所述重定位表格用于指示至少一个待修正偏移量的指令;
[0008]根据所述重定位表格,确定所述待修正偏移量的指令在所述可执行文件中的位置,并确定所述待修正偏移量的指令所对应的实例成员;
[0009]修正所述实例成员的偏移量。
[0010]在可选的一种方式中,所述获取与可执行文件对应的重定位表格,包括:
[0011]在确定更新系统时,向网络设备发送所述可执行文件的信息;接收所述网络设备发送的与所述可执行文件的信息对应的重定位表格;
[0012]或者,向网络设备发送软件版本信息;接收所述网络设备发送的与所述软件版本信息对应的重定位表格和可执行文件。
[0013]在可选的一种方式中,所述重定位表格中包括指令偏移量、指令类型、指令的实例成员;
[0014]其中,所述指令偏移量为待修正偏移量的指令在可执行文件中的偏移量,所述指令类型用于指示对待修正偏移量的指令中的立即数进行编码时的编码方式。
[0015]在可选的一种方式中,在修正所述实例成员的偏移量之前,还包括:
[0016]计算所述实例成员的当前的实际偏移量,其中,所述实际偏移量为对所述实例成员的原始的成员偏移量进行修正后的偏移量;
[0017]修正所述实例成员的偏移量,包括:将所述实例成员的原始的成员偏移量,修正为所述实际偏移量。
[0018]在可选的一种方式中,在所述实例成员为实例成员变量时,计算所述实例成员的
实际偏移量,包括:
[0019]从当前实例成员变量所继承的类中的最高层的类开始,遍历当前实例成员变量所继承的每个类,将每个类中的实例成员变量进行对齐排列,得到每个类中的实例成员变量的偏移量;
[0020]确定位于当前实例成员变量之前的前一实例成员变量的偏移量、所述前一实例成员变量的大小、当前实例成员变量与所述前一实例成员变量之间的空间填充大小,三者之和为当前实例成员变量的实际偏移量;
[0021]在所述实例成员为虚函数时,计算所述实例成员的实际偏移量,包括:
[0022]从当前虚函数所继承的类中的最高层的类开始,遍历当前虚函数所继承的每个类,计算每个类中的虚函数的指针的偏移量,得到虚函数表;
[0023]确定所述虚函数表中位于当前虚函数之前的前一虚函数的指针的偏移量、当前虚函数的指针的长度之和,为当前虚函数的实际偏移量。
[0024]在可选的一种方式中,所述重定位表格中包括指令类型;所述指令类型用于指示对待修正偏移量的指令中的立即数进行编码时的编码方式,所述编码方式包括编码位置;
[0025]将所述实例成员的原始的成员偏移量,修正为所述实际偏移量,包括:
[0026]根据所述指令类型所指示的编码方式,将所述实际偏移量写入所述待修正偏移量的指令中的特定比特位上,所述特定比特位为编码方式中的编码位置所指示的比特位。
[0027]在可选的一种方式中,所述指令中包括操作码和操作数,所述操作码用于指示指令类型,所述操作数用于指示待运算的数据及数据所在的单元地址。
[0028]在可选的一种方式中,在修正所述实例成员的偏移量之后,还包括:
[0029]加载并运行修正后的可执行文件,其中,所述修正后的可执行文件按照修正后的指令运行。
[0030]在可选的一种方式中,所述加载并运行修正后的可执行文件,包括:
[0031]根据修正后的指令,访问所述实例成员。
[0032]第方面,本申请提供一种可执行文件处理方法,应用于网络设备,所述方法包括:
[0033]根据至少一个待修正偏移量的指令,生成与可执行文件对应的重定位表格,所述重定位表格用于指示所述待修正偏移量的指令在所述可执行文件中的位置;
[0034]将所述重定位表格发送给电子设备,其中,所述重定位表格用于修正所述待修正偏移量的指令所对应的实例成员的的偏移量。
[0035]在可选的一种方式中,将所述重定位表格发送给电子设备,包括:
[0036]接收所述电子设备在更新系统时发送的所述可执行文件的信息;将与所述可执行文件的信息对应的重定位表格,发送给所述电子设备;
[0037]或者,接收电子设备发送的软件版本信息;将与所述软件版本信息对应的重定位表格和可执行文件,发送给所述电子设备。
[0038]在可选的一种方式中,所述重定位表格中包括指令偏移量、指令类型、指令的实例成员;
[0039]其中,所述指令偏移量为待修正偏移量的指令在可执行文件中的偏移量,所述指令类型用于指示对待修正偏移量的指令中的立即数进行编码时的编码方式。
[0040]在可选的一种方式中,所述重定位表格,具体用于根据所述实例成员的当前的实
际偏移量,修正所述待修正偏移量的指令所对应的实例成员的的偏移量;
[0041]其中,所述实际偏移量为对所述实例成员的原始的成员偏移量进行修正后的偏移量。
[0042]在可选的一种方式中,所述指令中包括操作码和操作数,所述操作码用于指示指令类型,所述操作数用于指示待运算的数据及数据所在的单元地址。
[0043]第你方面,本申请提供一种处理器,所述处理器应用于终端设备,所述处理器用于:
[0044]获取与可执行文件对应的重定位表格,其中,所述重定位表格用于指示至少一个待修正偏移量的指令;
[0045]根据所述重定位表格,确定所述待修正偏移量的指令在所述可执行文件中的位置,并确定所述待修正偏移量的指令所对应的实例成员;
[0046]修正所述实例成员的偏移量。
[0047]在可选的一种方式中,所述处理器获取与可执行文件对应的重定位表格时,具体用于:
[0048]在确定更新系统时,向网络设备发送所述可执行文件的信息;接收所述网络设备发送的与所述可执行文件的信息对应的重定位表格;
[0049]或者,向网络设备发送软件版本信息;接收所述网络设备发送的与所述软件版本信息对应的重定位表格和可执行文件本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种可执行文件处理方法,应用于电子设备,其特征在于,所述方法包括:获取与可执行文件对应的重定位表格,其中,所述重定位表格用于指示至少一个待修正偏移量的指令;根据所述重定位表格,确定所述待修正偏移量的指令在所述可执行文件中的位置,并确定所述待修正偏移量的指令所对应的实例成员;修正所述实例成员的偏移量。2.根据权利要求1所述的方法,其特征在于,所述获取与可执行文件对应的重定位表格,包括:在确定更新系统时,向网络设备发送所述可执行文件的信息;接收所述网络设备发送的与所述可执行文件的信息对应的重定位表格;或者,向网络设备发送软件版本信息;接收所述网络设备发送的与所述软件版本信息对应的重定位表格和可执行文件。3.根据权利要求1或2所述的方法,其特征在于,所述重定位表格中包括指令偏移量、指令类型、指令的实例成员;其中,所述指令偏移量为待修正偏移量的指令在可执行文件中的偏移量,所述指令类型用于指示对待修正偏移量的指令中的立即数进行编码时的编码方式。4.根据权利要求1-3任一项所述的方法,其特征在于,在修正所述实例成员的偏移量之前,还包括:计算所述实例成员的当前的实际偏移量,其中,所述实际偏移量为对所述实例成员的原始的成员偏移量进行修正后的偏移量;修正所述实例成员的偏移量,包括:将所述实例成员的原始的成员偏移量,修正为所述实际偏移量。5.根据权利要求4所述的方法,其特征在于,在所述实例成员为实例成员变量时,计算所述实例成员的实际偏移量,包括:从当前实例成员变量所继承的类中的最高层的类开始,遍历当前实例成员变量所继承的每个类,将每个类中的实例成员变量进行对齐排列,得到每个类中的实例成员变量的偏移量;确定位于当前实例成员变量之前的前一实例成员变量的偏移量、所述前一实例成员变量的大小、当前实例成员变量与所述前一实例成员变量之间的空间填充大小,三者之和为当前实例成员变量的实际偏移量;在所述实例成员为虚函数时,计算所述实例成员的实际偏移量,包括:从当前虚函数所继承的类中的最高层的类开始,遍历当前虚函数所继承的每个类,计算每个类中的虚函数的指针的偏移量,得到虚函数表;确定所述虚函数表中位于当前虚函数之前的前一虚函数的指针的偏移量、当前虚函数的指针的长度之和,为当前虚函数的实际偏移量。6.根据权利要求4所述的方法,其特征在于,所述重定位表格中包括指令类型;所述指令类型用于指示对待修正偏移量的指令中的立即数进行编码时的编码方式,所述编码方式包括编码位置;将所述实例成员的原始的成员偏移量,修正为所述实际偏移量,包括:
根据所述指令类型所指示的编码方式,将所述实际偏移量写入所述待修正偏移量的指令中的特定比特位上,所述特定比特位为编码方式中的编码位置所指示的比特位。7.根据权利要求1-6任一项所述的方法,其特征在于,所述指令中包括操作码和操作数,所述操作码用于指示指令类型,所述操作数用于指示待运算的数据及数据所在的单元地址。8.根据权利要求1-7任一项所述的方法,其特征在于,在修正所述实例成员的偏移量之后,还包括:加载并运行修正后的可执行文件,其中,所述修正后的可执行文件按照修正后的指令运行。9.根据权利要求8所述的方法,其特征在于,所述加载并运行修正后的可执行文件,包括:根据修正后的指令,访问所述实例成员。10.一种可执行文件处理方法,应用于网络设备,其特征在于,所述方法包括:根据至少一个待修正偏移量的指令,生成与可执行文件对应的重定位表格,所述重定位表格用于指示所述待修正偏移量的指令在所述可执行文件中的位置;将所述重定位表格发送给电子设备,其中,所述重定位表格用于修正所述待修正偏移量的指令所对应的实例成员的的偏移量。11.根据权利要求10所述的方法,其特征在于,将所述重定位表格发送给电子设备,包括:接收所述电子设备在更新系统时发送的所述可执行文件的信息;将与所述可执行文件的信息对应的重定位表格,发送给所述电子设备;或者,接收电子设备发送的软件版本信息;将与所述软件版本信息对应的重定位表格和可执行文件,发送给所述电子设备。12.根据权利要求10或11所述的方法,其特征在于,所述重定位表格中包括指令偏移量、指令类型、指令的实例成员;其中,所述指令偏移量为待修正偏移量的指令在可执行文件中的偏移量,所述指令类型用于指示对待修正偏移量的指令中的立即数进行编码时的编码方式。13.根据权利要求10-12任一项所述的方法,其特征在于,所述重定位表格,具体用于根据所述实例成员的当前的实际偏移量,修正所述待修正偏移量的指令所对应的实例成员的的偏移量;其中,所述实际偏移量为对所述实例成员的原始的成员偏移量进行修正后的偏移量。14.根据权利要求10-13任一项所述的方法,其特征在于,所述指令中包括操作码和操作数,所述操作码用于指示指令类型,所述操作数用于指示待运算的数据及数据所在的单元地址。15.一种处理器,其特征在于,所述处理器应用于终端设备,所述处理器用于:获取与可执行文件对应的重定位表格,其中,所述重定位表格用于指示至少一个待修正偏移量的指令;根据所述重定位表格,确定所述待修正偏移量的指令在所述可执行文件中的位置,并确定所述待修正偏移量的指令所对应的实例成员;
修正所述实例成员的偏移量。16.根据权利要求15所述的处理器,其特征在于,所述处理器获取与可执行文件对应的重定位表格时,具体用于:在确定更新系统时,向网络设备发送所述可执行文件的信息;接收所述...

【专利技术属性】
技术研发人员:黄海涛郑家欢叶祥润何忠政崔桂华张必红程帅吴永崇
申请(专利权)人:华为技术有限公司
类型:发明
国别省市:

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

1