一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

可执行文件处理方法和设备与流程

2021-11-03 12:58:00 来源:中国专利 TAG:
1.本技术涉及终端技术,尤其涉及一种可执行文件处理方法和设备。
背景技术
::2.可以在电子设备中布置有系统和各种应用程序。电子设备中所布置的应用程序的代码,常常包括多个类;并且,系统的代码中,通常包括多个类。3.提供系统或应用程序的设备,会对应用程序的代码中的类进行调整或者对系统的代码中的类进行调整;在调整类的时候,会对与类相关的实例成员的布局造成影响。从而,在对系统或应用程序进行安装时,需要修正类中的实例成员的偏移量。4.然而如何为快速、准确的修正实例成员的偏移量,是一个需要解决的问题。技术实现要素:5.本技术提供一种可执行文件处理方法和设备,以解决快速、准确的修正实例成员的偏移量的问题。6.第一方面,本技术提供一种可执行文件处理方法,应用于电子设备,所述方法包括:7.获取与可执行文件对应的重定位表格,其中,所述重定位表格用于指示至少一个待修正偏移量的指令;8.根据所述重定位表格,确定所述待修正偏移量的指令在所述可执行文件中的位置,并确定所述待修正偏移量的指令所对应的实例成员;9.修正所述实例成员的偏移量。10.在可选的一种方式中,所述获取与可执行文件对应的重定位表格,包括:11.在确定更新系统时,向网络设备发送所述可执行文件的信息;接收所述网络设备发送的与所述可执行文件的信息对应的重定位表格;12.或者,向网络设备发送软件版本信息;接收所述网络设备发送的与所述软件版本信息对应的重定位表格和可执行文件。13.在可选的一种方式中,所述重定位表格中包括指令偏移量、指令类型、指令的实例成员;14.其中,所述指令偏移量为待修正偏移量的指令在可执行文件中的偏移量,所述指令类型用于指示对待修正偏移量的指令中的立即数进行编码时的编码方式。15.在可选的一种方式中,在修正所述实例成员的偏移量之前,还包括:16.计算所述实例成员的当前的实际偏移量,其中,所述实际偏移量为对所述实例成员的原始的成员偏移量进行修正后的偏移量;17.修正所述实例成员的偏移量,包括:将所述实例成员的原始的成员偏移量,修正为所述实际偏移量。18.在可选的一种方式中,在所述实例成员为实例成员变量时,计算所述实例成员的实际偏移量,包括:19.从当前实例成员变量所继承的类中的最高层的类开始,遍历当前实例成员变量所继承的每个类,将每个类中的实例成员变量进行对齐排列,得到每个类中的实例成员变量的偏移量;20.确定位于当前实例成员变量之前的前一实例成员变量的偏移量、所述前一实例成员变量的大小、当前实例成员变量与所述前一实例成员变量之间的空间填充大小,三者之和为当前实例成员变量的实际偏移量;21.在所述实例成员为虚函数时,计算所述实例成员的实际偏移量,包括:22.从当前虚函数所继承的类中的最高层的类开始,遍历当前虚函数所继承的每个类,计算每个类中的虚函数的指针的偏移量,得到虚函数表;23.确定所述虚函数表中位于当前虚函数之前的前一虚函数的指针的偏移量、当前虚函数的指针的长度之和,为当前虚函数的实际偏移量。24.在可选的一种方式中,所述重定位表格中包括指令类型;所述指令类型用于指示对待修正偏移量的指令中的立即数进行编码时的编码方式,所述编码方式包括编码位置;25.将所述实例成员的原始的成员偏移量,修正为所述实际偏移量,包括:26.根据所述指令类型所指示的编码方式,将所述实际偏移量写入所述待修正偏移量的指令中的特定比特位上,所述特定比特位为编码方式中的编码位置所指示的比特位。27.在可选的一种方式中,所述指令中包括操作码和操作数,所述操作码用于指示指令类型,所述操作数用于指示待运算的数据及数据所在的单元地址。28.在可选的一种方式中,在修正所述实例成员的偏移量之后,还包括:29.加载并运行修正后的可执行文件,其中,所述修正后的可执行文件按照修正后的指令运行。30.在可选的一种方式中,所述加载并运行修正后的可执行文件,包括:31.根据修正后的指令,访问所述实例成员。32.第方面,本技术提供一种可执行文件处理方法,应用于网络设备,所述方法包括:33.根据至少一个待修正偏移量的指令,生成与可执行文件对应的重定位表格,所述重定位表格用于指示所述待修正偏移量的指令在所述可执行文件中的位置;34.将所述重定位表格发送给电子设备,其中,所述重定位表格用于修正所述待修正偏移量的指令所对应的实例成员的的偏移量。35.在可选的一种方式中,将所述重定位表格发送给电子设备,包括:36.接收所述电子设备在更新系统时发送的所述可执行文件的信息;将与所述可执行文件的信息对应的重定位表格,发送给所述电子设备;37.或者,接收电子设备发送的软件版本信息;将与所述软件版本信息对应的重定位表格和可执行文件,发送给所述电子设备。38.在可选的一种方式中,所述重定位表格中包括指令偏移量、指令类型、指令的实例成员;39.其中,所述指令偏移量为待修正偏移量的指令在可执行文件中的偏移量,所述指令类型用于指示对待修正偏移量的指令中的立即数进行编码时的编码方式。40.在可选的一种方式中,所述重定位表格,具体用于根据所述实例成员的当前的实际偏移量,修正所述待修正偏移量的指令所对应的实例成员的的偏移量;41.其中,所述实际偏移量为对所述实例成员的原始的成员偏移量进行修正后的偏移量。42.在可选的一种方式中,所述指令中包括操作码和操作数,所述操作码用于指示指令类型,所述操作数用于指示待运算的数据及数据所在的单元地址。43.第你方面,本技术提供一种处理器,所述处理器应用于终端设备,所述处理器用于:44.获取与可执行文件对应的重定位表格,其中,所述重定位表格用于指示至少一个待修正偏移量的指令;45.根据所述重定位表格,确定所述待修正偏移量的指令在所述可执行文件中的位置,并确定所述待修正偏移量的指令所对应的实例成员;46.修正所述实例成员的偏移量。47.在可选的一种方式中,所述处理器获取与可执行文件对应的重定位表格时,具体用于:48.在确定更新系统时,向网络设备发送所述可执行文件的信息;接收所述网络设备发送的与所述可执行文件的信息对应的重定位表格;49.或者,向网络设备发送软件版本信息;接收所述网络设备发送的与所述软件版本信息对应的重定位表格和可执行文件。50.在可选的一种方式中,所述重定位表格中包括指令偏移量、指令类型、指令的实例成员;51.其中,所述指令偏移量为待修正偏移量的指令在可执行文件中的偏移量,所述指令类型用于指示对待修正偏移量的指令中的立即数进行编码时的编码方式。52.在可选的一种方式中,所述处理器在修正所述实例员的偏移量之前,还用于:53.计算所述实例成员的当前的实际偏移量,其中,所述实际偏移量为对所述实例成员的原始的成员偏移量进行修正后的偏移量;54.所述处理器修正所述实例成员的偏移量时,具体用于:将所述实例成员的原始的成员偏移量,修正为所述实际偏移量。55.在可选的一种方式中,在所述实例成员为实例成员变量时,所述处理器计算所述实例成员的实际偏移量时,具体用于:56.从当前实例成员变量所继承的类中的最高层的类开始,遍历当前实例成员变量所继承的每个类,将每个类中的实例成员变量进行对齐排列,得到每个类中的实例成员变量的偏移量;57.确定位于当前实例成员变量之前的前一实例成员变量的偏移量、所述前一实例成员变量的大小、当前实例成员变量与所述前一实例成员变量之间的空间填充大小,三者之和为当前实例成员变量的实际偏移量;58.所述处理器在所述实例成员为虚函数时,计算所述实例成员的实际偏移量时,具体用于:59.从当前虚函数所继承的类中的最高层的类开始,遍历当前虚函数所继承的每个类,计算每个类中的虚函数的指针的偏移量,得到虚函数表;60.确定所述虚函数表中位于当前虚函数之前的前一虚函数的指针的偏移量、当前虚函数的指针的长度之和,为当前虚函数的实际偏移量。61.在可选的一种方式中,所述重定位表格中包括指令类型;所述指令类型用于指示对待修正偏移量的指令中的立即数进行编码时的编码方式,所述编码方式包括编码位置;62.所述处理器将所述实例成员的原始的成员偏移量,修正为所述实际偏移量时,具体用于:63.根据所述指令类型所指示的编码方式,将所述实际偏移量写入所述待修正偏移量的指令中的特定比特位上,所述特定比特位为编码方式中的编码位置所指示的比特位。64.在可选的一种方式中,所述指令中包括操作码和操作数,所述操作码用于指示指令类型,所述操作数用于指示待运算的数据及数据所在的单元地址。65.在可选的一种方式中,所述处理器在修正所述实例成员的偏移量之后,还用于:66.加载并运行修正后的可执行文件,其中,所述修正后的可执行文件按照修正后的指令运行。67.在可选的一种方式中,所述处理器加载并运行修正后的可执行文件时,具体用于:68.根据修正后的指令,访问所述实例成员。69.第四方面,本技术提供一种处理器,所述处理器应用于网络设备,所述处理器用于:70.根据至少一个待修正偏移量的指令,生成与可执行文件对应的重定位表格,所述重定位表格用于指示所述待修正偏移量的指令在所述可执行文件中的位置;71.将所述重定位表格发送给电子设备,其中,所述重定位表格用于修正所述待修正偏移量的指令所对应的实例成员的的偏移量。72.在可选的一种方式中,所述处理器将所述重定位表格发送给电子设备时,具体用于:73.接收所述电子设备在更新系统时发送的所述可执行文件的信息;将与所述可执行文件的信息对应的重定位表格,发送给所述电子设备;74.或者,接收电子设备发送的软件版本信息;将与所述软件版本信息对应的重定位表格和可执行文件,发送给所述电子设备。75.在可选的一种方式中,所述重定位表格中包括指令偏移量、指令类型、指令的实例成员;76.其中,所述指令偏移量为待修正偏移量的指令在可执行文件中的偏移量,所述指令类型用于指示对待修正偏移量的指令中的立即数进行编码时的编码方式。77.在可选的一种方式中,所述重定位表格,具体用于根据所述实例成员的当前的实际偏移量,修正所述待修正偏移量的指令所对应的实例成员的的偏移量;78.其中,所述实际偏移量为对所述实例成员的原始的成员偏移量进行修正后的偏移量。79.在可选的一种方式中,所述指令中包括操作码和操作数,所述操作码用于指示指令类型,所述操作数用于指示待运算的数据及数据所在的单元地址。80.第五方面,本技术提供一种电子设备,所述电子设备包括:处理器;81.所述处理器,用于执行计算机可执行程序代码中的指令;当所述处理器执行所述指令时,所述指令使所述电子设备执行第一方面提供的方法。82.在一种可能的实现方式中,所述电子设备还包括接收器;所述接收器,用于接收网络设备发送的重定位表格。83.第六方面,本技术提供一种网络设备,所述网络设备包括:处理器和发送器;84.所述处理器,用于执行计算机可执行程序代码中的指令;当所述处理器执行所述指令时,所述指令使所述电子设备执行第二方面提供的方法;85.所述发送器,用于将重定位表格发送给电子设备。86.第七方面,本技术提供一种通信系统,包括如第三方面任一项所述的终端设备、如第四方面任一项所述的电子设备、以及网络设备。网络设备用于接收电子设备提供的软件控制程序和重定位表格;网络设备可以将软件控制程序和重定位表格发送给终端设备。87.第八方面,本技术提供一种终端设备,包括用于执行以上第一方面的任一实现方式的至少一个处理元件或芯片。88.第九方面,本技术提供一种程序,该程序在被处理器执行时用于执行以上第一方面的任一实现方式。89.第十方面,本技术提供一种计算机可读存储介质,包括第九方面的程序。90.第十一方面,本技术提供一种电子设备,包括用于执行以上第一方面的任一实现方式的至少一个处理元件或芯片。91.第十二方面,本技术提供一种程序,该程序在被处理器执行时用于执行以上第二方面的任一实现方式。92.第十三方面,本技术提供一种计算机可读存储介质,包括第十二方面的程序。93.通过获取与可执行文件对应的重定位表格,其中,重定位表格用于指示至少一个待修正偏移量的指令;根据重定位表格,确定待修正偏移量的指令在可执行文件中的位置,并确定待修正偏移量的指令所对应的实例成员;修正实例成员的偏移量。在初次安装系统、或者初次安装应用程序、或者更新系统、或者更新应用程序时,电子设备需要对可执行文件的指令中的实例成员的偏移量进行修正,电子设备首先获取与获取与可执行文件对应的重定位表格,进而依据重定位表格,找到待修正偏移量的指令,就可以对指令中的实例成员的偏移量进行修正。本实施例提供的方案,不需要为每一实例成员增加一个全局变量;只需要为应用程序的各实例成员,提供一个重定位表格,根据重定位表格中信息就可以对实例成员的偏移量进行修正,即,对用于编译实例成员的指令进行修正了,减小了代码的开销,也减少了应用程序占用的内存空间和存储空间;并且,只需要对需要修正的实例成员的指令进行修正就行了,由于不需要对实例成员的访问去添加额外指令,可以减少指令开销。并且,本实施例提供的方案,由于重定位表格可以独立于应用程序,本实施例提供的方案的执行过程的代码,不需要在应用程序中布置,进而,若本实施例提供的方案发生在应用程序的升级或更新过程中,不会增加应用程序的运行时的开销。进一步的,由于重定位表格可以独立于应用程序,本实施例提供的方案的执行过程,不需要在应用程序的运行过程中执行。附图说明94.图1为本技术实施例提供的一种应用场景示意图一;95.图2为本实施例提供的类的编译的示意图一;96.图3为本实施例提供的类的编译的示意图二;97.图4为本实施例提供的实例成员的偏移量示意图一;98.图5为本实施例提供的类的编译的示意图三;99.图6为本实施例提供的实例成员的偏移量示意图二;100.图7为本实施例提供的类的编译的示意图四;101.图8为本实施例提供的类的编译的示意图五;102.图9为本实施例提供的实例成员的偏移量示意图二;103.图10为本实施例提供的类的编译的示意图六;104.图11为本实施例提供的实例成员的偏移量示意图四;105.图12为本实施例提供的类的编译的示意图七;106.图13为本技术实施例提供的一种可执行文件处理方法的流程示意图;107.图14为本技术实施例提供的一种解耦类的示意图;108.图15为本技术实施例提供的一种应用场景示意图二;109.图16为本技术实施例提供的一种应用场景示意图三;110.图17为本技术实施例提供的另一种可执行文件处理方法的流程示意图;111.图18为本技术实施例提供的又一种可执行文件处理方法的流程示意图;112.图19为本技术实施例提供的一种处理器的结构示意图;113.图20为本技术实施例提供的另一种处理器的结构示意图;114.图21为本技术实施例提供的一种电子设备的结构示意图;115.图22为本技术实施例提供的一种网络设备的结构示意图。具体实施方式116.本技术实施例应用于电子设备。电子设备包括但不限于:终端设备、网络设备、服务器。其中,终端设备可以是现有技术中终端设备,也可以是未来出现的终端设备;网络设备可以是现有技术中终端设备,也可以是未来出现的网络设备。117.并且,电子设备从网络上获取软件控制程序和重定位表格的方式,可以采用现有技术中的通信系统,或者,第五代移动通信网络(5th-generation,5g)通信系统,或者,未来可能出现的其他系统,或者,其他通信系统。例如:无线局域网通信(wirelesslocalareanetwork,wlan)系统,全球移动通信(globalsystemofmobilecommunication,gsm)系统、码分多址(codedivisionmultipleaccess,cdma)系统、宽带码分多址(widebandcodedivisionmultipleaccess,wcdma)系统、通用分组无线业务(generalpacketradioservice,gprs)、长期演进(longtermevolution,lte)系统、lte频分双工(frequencydivisionduplex,fdd)系统、lte时分双工(timedivisionduplex,tdd)、通用移动通信系统(universalmobiletelecommunicationsystem,umts)、全球互联微波接入(worldwideinteroperabilityformicrowaveaccess,wimax)通信系统、新空口(newradio,nr)等等。118.以下对本技术中的部分用语进行解释说明,以便于本领域技术人员理解。需要说明的是,当本技术实施例的方案应用于电子设备时,电子设备的名称可能发生变化,但这并不影响本技术实施例方案的实施。119.1)电子设备,包括但不限于:终端设备、网络设备、服务器、智能设备、等等。电子设备可以是现有技术中各种类型的电子设备,也可以是未来出现的电子设备。120.2)终端设备,是一种向用户提供语音和/或数据连通性的设备。本技术中终端设备主要指但不限于移动终端、车辆终端、车载终端、车辆设备、公共终端、无线通信功能的手持式设备、可穿戴设备、计算设备等,其中,车载终端包括但不限于车载导航仪等,移动终端包括但不限于手机、可穿戴设备、平板电脑等。示例性地,终端设备还可以是虚拟现实(virtualreality,vr)终端设备、增强现实(augmentedreality,ar)终端设备、工业控制中的无线终端、无人驾驶中的无线终端、远程医疗中的无线终端、智能电网中的无线终端、智慧城市(smartcity)中的无线终端、智慧家庭(smarthome)中的无线终端等等。121.3)网络设备,又称为无线接入网(radioaccessnetwork,ran)设备是一种将终端设备接入到无线网络的设备,其包括各种通信制式中的设备;网络设备可能有多种形式,比如宏基站、微基站、中继站和接入点等;网络设备包括但不限于新空口网络中的网络设备、长期演进网络中的网络设备。示例性地,网络设备包括但不限于:传输点(transmissionreceptionpoint,trp)、下一代节点b(nextgenerationnodeb,gnb)、全球移动通信系统(globalsystemformobilecommunication,gsm)或码分多址(codedivisionmultipleaccess,cdma)中的基站收发台(basetransceiverstation,bts)、宽带码分多址(widebandcodedivisionmultipleaccess,wcdma)系统中的节点b(nodeb,nb)、长期演进系统中的演进型节点b(evolutionalnodeb,enb或enodeb)、无线网络控制器(radionetworkcontroller,rnc)、基站控制器(basestationcontroller,bsc)、henb(homeevolvednodeb),或hnb(homenodeb)、基带单元(basebanduit,bbu)等。122.4)“多个”是指两个或两个以上,其它量词与之类似。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。123.5)“对应”可以指的是一种关联关系或绑定关系,a与b相对应指的是a与b之间是一种关联关系或绑定关系。124.需要指出的是,本技术实施例中涉及的名词或术语可以相互参考,不再赘述。125.图1为本技术实施例提供的一种应用场景示意图一。如图1所示,本技术实施例的方案,电子设备01,例如是智能终端、手持终端。网络设备02,例如是服务器。网络设备02可以生成应用程序,将应用程序发送给电子设备01;电子设备01安装应用程序。并且电子设备01中安装有系统(控制系统)。126.可知,可以在电子设备中布置各种应用程序,其中,应用程序还可以称为软件程序、或者软件控制程序。应用程序的代码中,通常会具有多个类;类中具有实例成员。实例成员可以是实例成员变量,或者,实例成员可以是实例成员方法。例如,实例成员方法是虚函数。127.并且,为了运行应用程序,还会在电子设备中设置系统(控制系统)。128.一个示例中,用于生成应用程序的网络设备,可以采用编译器对应用程序进行编译;在编译的过程中,编译器可以计算应用程序中每一个类的布局,进而得到实例成员的偏移量。采用编译器将实例成员的偏移量,保存在可执行文件中;其中,可执行文件与应用程序一起被存储。129.电子设备中安装有系统和应用程序,在对电子设备的系统进行更新的场景下,如下介绍。若应用程序中的实例成员,依赖于特定版本的系统中的父类的时候,此时,应用程序的父类或者父类的父类,被定义在一个特定版本的系统中;将系统进行更新,得到新版本的系统,由于应用程序中的实例成员所依赖的父类、或者所依赖的父类的父类,被定义在特定版本的系统中,会导致应用程序无法在新版本的系统中正常运行。130.举例来说,应用程序中包括类b,类b中包括实例成员c;应用程序可以在版本a的系统中运行;其中,类b的父类为类a,但是类a被定义在版本a的系统中。将版本a的系统进行更新,得到版本b的系统。此时,在将应用程序运行在版本b的系统中的时候,由于将应用程序的类b的实例成员c依赖于类a,但是类a定义在版本a的系统中,从而应用程序的实例成员c也依赖于版本a的系统。但是此时,系统被更新了,导致应用程序无法在版本b的系统中正常运行。131.电子设备中安装有系统(system)和应用程序(application,app),在对电子设备的应用程序进行更新的场景下,如下介绍。电子设备中安装有应用程序,网络设备对该应用程序进行了更新;并且,电子设备选择更新该应用程序。此时,更新后的应用程序的代码中的类、实例成员已经被修改;网络设备将更新后的应用程序发送给电子设备,电子设备运行更新后的应用程序,但是电子设备中的与应用程序对应的可执行文件没有被修改,进而在依据可执行文件访问应用程序的实例成员时,会访问错误。132.在初始按照应用程序或者初次安装系统时,由于应用的类、实例成员发生变化,在依据可执行文件访问应用程序的实例成员时,会访问错误。133.进而,在初次安装系统、或者初次安装应用程序、或者更新系统、或者更新应用程序时,常常需要对系统或应用程序中的类进行调整。进而,会对与类相关的实例成员的布局造成影响,即,布局被调整;在布局被调整之后,会造成实例成员的访问错误的问题。134.举例来说,图2为本实施例提供的类的编译的示意图一,如图2所示,应用程序中包括有类a(classa);,如图3所示,类a的父类为类s(classs)。如图2所示,类a中定义了i图3为本实施例提供的类的编译的示意图二nt类型的对象m和n,分别为publicintm,publicintn;对象m和n是类a中的实例成员变量;并且类a中定义了实例成员变量m为obj.m=1。如图3所示,类s中定义了实例成员变量a和b,分别为publicinta,publicintb。对应用程序进行编译,从而对类a和类s进行编译,可以得到与应用程序对应的可执行文件。如图2所示,可执行文件中包括了用于访问实例成员变量m的指令“strw0,[x20,#16]”;指令“strw0,[x20,#16]”的立即数#16,为实例成员变量m相对于对象基地址的偏移,即,立即数#16为实例成员变量m的偏移量。图4为本实施例提供的实例成员的偏移量示意图一,如图4所示,图4中示出了对象基地址base,示出了实例成员变量m的偏移量offset。图5为本实施例提供的类的编译的示意图三,如图5所示,对类s进行修改,在类s中增加一个实例成员变量c,为publicintc。当类s中的实例成员变量发生变化,实例成员的布局会发生变化;图6为本实施例提供的实例成员的偏移量示意图二,如图6示,图6中示出了对象基地址base,示出了类s被修改之后的实例成员变量c的偏移量offset。此时,指令“strw0,[x20,#16]”中的用于指示实例成员变量m的偏移量#16,没有变化;从而,在采用可执行文件中的指令“strw0,[x20,#16]”,去访问实例成员变量m的时候,会访问到实例成员变量c,无法正确的访问到实例成员变量m。[0135]其中,指令,也可以称为机器指令。[0136]再举例来说,图7为本实施例提供的类的编译的示意图四,如图7所示,应用程序中包括有虚函数,虚函数定义为publicvoidtestvtable;图8为本实施例提供的类的编译的示意图五,如图8所示,虚函数的父类为类s(classs)。如图7所示,虚函数中定义了实例成员方法obj.f()。如图8所示,类s中定义了两个实例成员方法,分别为publicvoidf()、publicvoidg()。对应用程序进行编译,从而对虚函数和类s进行编译,可以得到与应用程序对应的可执行文件。如图7所示,可执行文件中包括了用于访问实例成员方法f的指令“ldrx1,[x0,#112]”;指令“ldrx1,[x0,#112]”的立即数#112,为实例成员方法f相对于对象基地址的偏移,即,立即数#112为实例成员方法f的偏移量。图9为本实施例提供的实例成员的偏移量示意图二,如图9所示,图9中示出了对象基地址base,示出了实例成员方法f的偏移量offset。图10为本实施例提供的类的编译的示意图六,如图10所示,对类s进行修改,在类s中增加一个实例成员方法e,为publicvoide()。当类s中的实例成员变量发生变化,实例成员的布局会发生变化;图11为本实施例提供的实例成员的偏移量示意图四,如图11示,图11中示出了对象基地址base,示出了类s被修改之后的实例成员方法e的偏移量offset。此时,指令“ldrx1,[x0,#112]”中的用于指示实例成员方法f的偏移量#112,没有变化;从而,在采用可执行文件中的指令“ldrx1,[x0,#112]”,去访问实例成员方法f的时候,会访问到实例成员方法e,无法正确的访问到实例成员方法f。[0137]根据以上分析可知,在初次安装系统、或者初次安装应用程序、或者更新系统、或者更新应用程序时,需要调修正实例成员的偏移量。[0138]一个示例中,可以采用全局偏移量表(globaloffsettable,got)方法或者函数链接表(procedurelinkagetable,plt)方法去进行sharedlib之间符号引用的解析。然而这两种方法不适合处理面向对象的代码,即,不适合于处理由面向对象的方式所得到的应用程序;进而不能支持实例成员的偏移量处理,也无法支持多态特性。[0139]一个示例中,可以在应用程序的运行过程中,可以为每一实例成员配置一个全局变量,全局变量用于存储实例成员的偏移值;将实例成员的全局变量存储至应用程序的代码中;进而,可以对每一个实例成员的全局变量进行修正,从而对修正的实例成员的偏移量。但是,上述设置全局变量的方式,需要为每一个实例成员增加一个全局变量,进而增大了代码的开销,增大了应用程序占用的内存空间和存储空间。并且要对每一个实例成员的全局变量进行修正,获取全局偏移量会增加一次访问内存操作以及加法操作,从而增加了指令开销。[0140]举例来说,图12为本实施例提供的类的编译的示意图七,如图12所示,objective-c编译器llvm(lowlevelvirtualmachine)为应用程序的每一个类中的每一个实例成员分配了一个全局变量;全局变量用于存储实例成员的偏移值;对类进行编译的时候,底层虚拟机计算出基类的大小为40字节,将此时的基类大小(instancesize)记录在派生类myclass中。在应用程序的类的实例成员进行调整,从而将基类的大小增加到48字节。然后,运行应用程序,在加载myclass类的时候,可以确定基类的真实大小、派生类myclass中所记录的基类大小,两者是不同的;进而可以确定基类的大小发生了改变,并且可以确定基类的大小增加了8字节。然后,利用runtime遍历myclass中的所有实例成员,将每一个实例成员的全部变量的值增加8,并且,将myclass类中所记录的基类大小(instancesize)也增加8。[0141]根据举例可知,由于需要每一个实例成员增加一个全局变量,在对实例成员的偏移量进行修正的时候,需要将每一个实例成员的全部变量的值增加8,从而增大了应用程序占用的内存空间和存储空间;并且,需要对每一个实例成员的全局变量进行修正,为每一个实例成员的全部变量的值增加8,进而增加了指令开销。并且,上述过程需要在应用程序的运行过程中去修正实例成员的全局变量,从而修正过程会占用中央处理器(centralprocessingunit,cpu),进而降低应用程序的启动性能。[0142]本技术提供了可执行文件处理方法和设备,可以解决上述问题。[0143]图13为本技术实施例提供的一种可执行文件处理方法的流程示意图。如图13所示,该方法包括:[0144]101、获取与可执行文件对应的重定位表格,其中,重定位表格用于指示至少一个待修正偏移量的指令。[0145]一个示例中,步骤101包括以下几种实现方式。[0146]第一种实现方式、在确定更新系统时,向网络设备发送可执行文件的信息;接收网络设备发送的与可执行文件的信息对应的重定位表格。[0147]第二种实现方式、向网络设备发送软件版本信息;接收网络设备发送的与软件版本信息对应的重定位表格和可执行文件。[0148]一个示例中,指令中包括操作码和操作数,操作码用于指示指令类型,操作数用于指示待运算的数据及数据所在的单元地址。[0149]示例性地,本实施例的执行主体可以为电子设备。[0150]电子设备用于安装系统和至少一个应用程序。系统、应用程序均是由代码构成的;系统的代码中包括了至少一个类,应用程序的代码中包括了至少一个类。每个类中具有实例成员。实例成员可以是实例成员变量,或者,实例成员可以是实例成员方法。[0151]根据前面的介绍可知,在初次安装系统、或者初次安装应用程序、或者更新系统、或者更新应用程序时,需要修正实例成员的偏移量。[0152]由于系统中的类不需要进行解耦,从而系统不需要以解耦方式进行编译;但是不排除未来出现系统中的类,是解耦类的情况。应用程序中的类可以以解耦方式编译,应用程序中的类可以分为解耦类和非解耦类。本实施例提供的方案适用于解耦类。[0153]解耦类,指的是,应用程序中的需要继承系统中的类(除去系统中的object)的类;即,应用程序中类,需要继承和依赖于系统中的类(除去系统中的object)。[0154]非解耦类指的是,指的是,应用程序中的不需要继承系统中的类(除去系统中的object)的类;即,应用程序中类,不需要继承和依赖于系统中的类(除去系统中的object)。[0155]图14为本技术实施例提供的一种解耦类的示意图。如图14所示,系统中具有对象object,并且,系统还具有类a和类b;应用程序中包括类c、类d、类e和类f。系统的类a、类b都继承系统的object。应用程序的类c继承系统的object,应用程序的类e继承应用程序的类c;应用程序的类d继承系统的类a,应用程序的类f继承应用程序的类d。由于应用程序的类d的父类,为系统的类a,应用程序的类f的父类的父类,为系统的类a,从而,类d、类f是解耦类。但是类c、类e没有继承系统的类,类c、类e是非解耦类。可知,做为解耦类的类d、类f,会随着系统的类a的变化而变化;做为非解耦类的类c、e不会随着系统中的类a、类b的变化而变化。[0156]一个示例中,由于解耦类会随着系统的变化而变化,所以需要对解耦类的偏移量(offset)进行重新计算和读入,以避免软件控制程序无法正常运行的情况。[0157]应用程序具有对应的至少一个可执行文件;一个可执行文件与一个重定位表格表格对应,即,每一可执行文件具有对应的重定位表格。可执行文件中包括至少一个指令,指令中包括操作码和操作数;其中,操作码用于指示出指令的指令类型;操作数用于指示待运算的数据、以及数据所在的单元地址。可知,操作数中包括一个立即数,立即数为指令对应的实例成员的偏移量。[0158]举例来说,指令“strw0,[x20,#16]”;指令“strw0,[x20,#16]”是一条汇编指令。str为操作码;w0、x20、#16均是操作数。w0代表一个通用寄存器,w0是32位的寄存器;x0代表了另一个通用寄存器,x0是64位的寄存器。x20是基地址;#16是立即数,#16表征了指令对应的实例成员的偏移量为16,即该实例成员相对于对象基地址的偏移量为16。[0159]指令“strw0,[x20,#16]”指的是,将寄存器w0中的数据,保存到地址为“x20 16”所指示的内存单元中。可知,寄存器w0中的数据为待运算的数据,“x20 16”指示出了数据所在的单元地址。[0160]本技术实施例中,为了准确、快速的修正实例成员的偏移量,可以采用重定位表格去修正正实例成员的偏移量,其中,重定位表格用于指示至少一个待修正偏移量的指令。[0161]首先,针对一个需要修正的可执行文件,需要获取与该可执行文件对应的重定位表格。获取与可执行文件对应的重定位表格的方式,可以有以下几种。[0162]首先,介绍下获取与可执行文件对应的重定位表格的应用场景。图15为本技术实施例提供的一种应用场景示意图二。如图15所示,控制设备11生成应用程序;控制设备11将生成的应用程序或者更新后的应用程序,上传至网络设备12;网络设备14提供了一个应用服务,应用服务相当于是一个应用商店;网络设备14将应用服务提供给电子设备13。图16为本技术实施例提供的一种应用场景示意图三。如图16所示,电子设备13中可以显示应用服务的显示界面,该显示界面显示有多个应用程序的显示信息;显示信息,例如是,应用程序的图标、应用程序的简介。例如,电子设备13中的显示界面中显示了应用程序a、应用程序b、应用程序c。[0163]电子设备13可以自动判断是否需要下载应用服务中提供的应用程序,在电子设备13自动确定需要下载应用服务中提供的应用程序的时候,电子设备13从网络设备12中获取控制设备11提供的应用服务中提供的应用程序。举例来说,控制设备11将生成的应用程序a的安装包,上传至网络设备12;电子设备13自动确定需要下载应用服务中提供的应用程序a的时候,电子设备13向网络设备12发送获取指令;网络设备12根据获取指令将应用程序a的安装包,发送给电子设备13。[0164]或者,用户向电子设备13发送触发指令;电子设备13根据触发指令,确定需要下载应用服务中提供的应用程序;电子设备13从网络设备12中获取控制设备11提供的应用服务中提供的应用程序。举例来说,控制设备11将生成的应用程序a的安装包,上传至网络设备12;电子设备13获取用户发出的触发指令,该触发指令用于指示电子设备13下载应用程序a;电子设备13向网络设备12发送获取指令;网络设备12根据获取指令将应用程序a的安装包,发送给电子设备13。[0165]获取与可执行文件对应的重定位表格的第一种方式,电子设备在确定更新系统时,确定需要修正可执行文件的实例成员的偏移量,则需要获取到与可执行文件对应的重定位表格。此时,电子设备可以向网络设备发送可执行文件的信息;可执行文件的信息,例如是可执行文件的标识;网络设备已经预先生成或者获取到了与可执行文件对应的重定位表格,从而可以将与可执行文件的信息对应的重定位表格,发送给电子设备。[0166]基于图15-16所示的场景,举例来说,用于生成应用程序的控制设备11生成应用程序、可执行文件和重定位表格。控制设备11将软件安装包上传至网络设备12。电子设备13自动或者根据用户的指示,向网络设备12发送可执行文件的信息;网络设备12将存储的与可执行文件对应的重定位表格,发送给电子设备13。[0167]获取与可执行文件对应的重定位表格的第二种方式,如下介绍。在电子设备初次安装应用程序或者更新应用程序时,电子设备可以确定需要安装哪个版本的应用程序,进而电子设备向网络设备发送应用程序的软件版本信息。网络设备预先已经生成了与软件版本信息对应的应用程序,网络设备可以采用编译器对该应用程序进行编译,得到与软件版本信息对应的可执行文件;并且,网络设备生成与软件版本信息对应的重定位表格,其中,可执行文件与重定位表格是对应的。[0168]基于图15-16所示的场景,举例来说,用于生成应用程序的控制设备11生成应用程序、可执行文件和重定位表格。为了标志出为应用程序配置了重定位表格,可以为应用程序赋予一个指示标识(也可以称为“标识”),该指示标识用于指示为应用程序配置了重定位表格。可知,用于生成应用程序的控制设备11在生成重定位表格的时候,同时生成了一个指示标识,指示标识用于指示为应用程序配置了重定位表格;一个示例中,指示标识还可以指示出重定位表格的存储位置。如图15所示,控制设备11生成软件安装包,软件安装包中包括了应用程序、重定位表格和指示标识,指示标识用于指示为应用程序配置了重定位表格;控制设备11将软件安装包上传至网络设备12。并且,控制设备11可以通知网络设备14应用程序被更新了;如图16所示,网络设备14用于向电子设备13提供应用服务,应用服务相当于是一个应用商店;从而,网络设备14可以在应用服务中显示出控制设备11所提供的应用程序,使得电子设备13自己选择是否根据网络设备14所显示的应用服务中的内容,去从网络设备12中获取软件安装包。电子设备13自动或者根据用户的指示,从网络设备12中获取软件安装包。进而,电子设备13得到软件安装包,软件安装包中包括了应用程序、重定位表格和指示标识。电子设备13可以根据指示标识,确定应用程序被配置了重定位表格。[0169]或者,基于图15-16所示的场景,再举例来说,如图15所示,控制设备11生成软件安装包,软件安装包中包括了应用程序、重定位表格和指示标识,指示标识用于指示为应用程序配置了重定位表格;控制设备11将软件安装包上传至网络设备12。并且,控制设备11可以通知网络设备14应用程序被更新了;如图16所示,网络设备14用于向电子设备13提供应用服务,应用服务相当于是一个应用商店;从而,网络设备14可以在应用服务中显示出控制设备11所提供的应用程序,使得电子设备13自己选择是否根据网络设备14所显示的应用服务中的内容,去从网络设备12中获取应用程序。电子设备13自动或者根据用户的指示,从网络设备12中获取应用程序。此时,网络设备12将指示标识放入应用程序中,网络设备12将携带有指示标识的应用程序,发送给电子设备13。进而,电子设备13可以根据指示标识,确定应用程序被配置了重定位表格。电子设备13根据终端设备的当前状态,确定是否从网络设备12中获取与应用程序对应的重定位表格。例如,电子设备13根据系统的当前版本,确定是否获取重定位表格。电子设备13在确定需要获取与应用程序对应的重定位表格的时候,电子设备13再向网络设备12发送获取请求,网络设备12将重定位表格发送给电子设备13。[0170]上述指示标识可以隐形的存储在网络设备和终端设备中,进而的电子设备在获取到应用程序、重定位表格和指示标识之后,电子设备的后台可以根据指示标识确定获取到了重定位表格。[0171]获取与可执行文件对应的重定位表格的第三种方式,如下介绍。在电子设备初次系统之后,与上述第二种方式相同,电子设备可以确定需要安装哪个版本的应用程序,进而电子设备向网络设备发送应用程序的软件版本信息。网络设备预先已经生成了与软件版本信息对应的应用程序,网络设备可以采用编译器对该应用程序进行编译,得到与软件版本信息对应的可执行文件;并且,网络设备生成与软件版本信息对应的重定位表格,其中,可执行文件与重定位表格是对应的。[0172]获取与可执行文件对应的重定位表格的第四种方式,在初次安装系统、或者初次安装应用程序、或者更新系统、或者更新应用程序时,电子设备可以从其他存储介质中,获取到与可执行文件对应的重定位表格。例如,单子设备从可移动硬盘中拷贝重定位表格。[0173]102、根据重定位表格,确定待修正偏移量的指令在可执行文件中的位置,并确定待修正偏移量的指令所对应的实例成员。[0174]示例性地,重定位表格可以指示出至少一个待修正偏移量的指令在可执行文件中的位置,进而电子设备可以直接根据重定位表格,确定需要修正哪几个指令,并且确定出这些指令在可执行文件中的位置。[0175]根据前面的介绍,可执行文件中包括至少一个指令,指令中包括操作码和操作数;其中,操作码用于指示出指令的指令类型;操作数用于指示待运算的数据、以及数据所在的单元地址。其中,操作数中包括一个立即数,立即数为指令对应的实例成员的偏移量。[0176]可知,一个指令用于访问一个实例成员,指令与实例成员相对应;电子设备在可执行文件中找到待修正偏移量的指令之后,就可以确定出该指令所对应的实例成员。[0177]103、修正实例成员的偏移量。[0178]示例性地,电子设备在找到需要待修正偏移量的指令、指令对应的实例成员之后,就可以对指令中的实例成员的偏移量进行修正。[0179]举例来说,可执行文件a中包括指令“strw0,[x20,#16]”。重定位表格指示出了该指令在可执行文件a中的位置。电子设备就可以找到指令“strw0,[x20,#16]”,其中,#16表征了指令对应的实例成员的偏移量为16;然后,电子设备就可以对偏移量16进行修正。[0180]本实施例,通过获取与可执行文件对应的重定位表格,其中,重定位表格用于指示至少一个待修正偏移量的指令;根据重定位表格,确定待修正偏移量的指令在可执行文件中的位置,并确定待修正偏移量的指令所对应的实例成员;修正实例成员的偏移量。在初次安装系统、或者初次安装应用程序、或者更新系统、或者更新应用程序时,电子设备需要对可执行文件的指令中的实例成员的偏移量进行修正,电子设备首先获取与获取与可执行文件对应的重定位表格,进而依据重定位表格,找到待修正偏移量的指令,就可以对指令中的实例成员的偏移量进行修正。本实施例提供的方案,不需要为每一实例成员增加一个全局变量;只需要为应用程序的各实例成员,提供一个重定位表格,根据重定位表格中信息就可以对实例成员的偏移量进行修正,即,对用于编译实例成员的指令进行修正了,减小了代码的开销,也减少了应用程序占用的内存空间和存储空间;并且,只需要对需要修正的实例成员的指令进行修正就行了,由于不需要对实例成员的访问去添加额外指令,可以减少指令开销。并且,本实施例提供的方案,由于重定位表格可以独立于应用程序,本实施例提供的方案的执行过程的代码,不需要在应用程序中布置,进而,若本实施例提供的方案发生在应用程序的升级或更新过程中,不会增加应用程序的运行时的开销。进一步的,由于重定位表格可以独立于应用程序,本实施例提供的方案的执行过程,不需要在应用程序的运行过程中执行。[0181]图17为本技术实施例提供的另一种可执行文件处理方法的流程示意图。如图17所示,该方法包括:[0182]201、获取与可执行文件对应的重定位表格,其中,重定位表格用于指示至少一个待修正偏移量的指令。[0183]一个示例中,重定位表格中包括指令偏移量、指令类型、指令的实例成员;其中,指令偏移量为待修正偏移量的指令在可执行文件中的偏移量,指令类型用于指示对待修正偏移量的指令中的立即数进行编码时的编码方式。[0184]示例性地,本步骤可以参见图13所示步骤101。并且,介绍如下内容。[0185]本实施例,用于生成应用程序的控制设备,在生成应用程序和可执行文件的时候,也会生成与可执行文件对应的重定位表格。首先,用于生成应用程序的控制设备,采用编译器对应用程序进行编译,可以得到每一指令(即,机器指令)的指令偏移量、指令类型、与指令对应的实例成员。其中,“指令偏移量”,指的是指令在可执行文件中的偏移量(即,待修正偏移量的指令在可执行文件中的偏移量)。“指令类型”,用于指示对待修正偏移量的指令中的立即数进行编码时的编码方式,其中编码方式包括了编码位置。“与指令对应的实例成员”,可以是实例成员的信息;实例成员的信息,例如包括了第一标识和第二标识;第一标识,指的是实例成员的标识;第二标识,指的是实例成员所归属的类的标识,即,指的是实例成员所继承的类的标识。每一指令的指令偏移量、指令类型、以及指令对应的实例成员,构成了每一指令的重定位信息。进而,用于生成应用程序的控制设备,可以将每一个指令的重定位信息,放入一个重定位表格中。表1示出了重定位表格的一种结构。[0186]表1重定位表格[0187]offsetclassidfieldid/methodid指令类型[0188]如表1所示,重定位表格至少由四部分构成,分别为指令偏移量(表1中的offset)、第二标识(表1中的classid)、第一标识(表1中的fieldid/methodid)和指令类型。其中,在实例成员为实例成员变量的时候,实例成员的第一标识采用fieldid进行表示;在实例成员为实例成员方法的时候,实例成员的第一标识采用methodid进行表示。[0189]表2示出了重定位表格的另一种结构。[0190]表2重定位表格[0191]offsetfieldid/methodid指令类型[0192]如表1所示,重定位表格至少由三部分构成,分别为指令偏移量(表2中的offset)、第一标识(表2中的fieldid/methodid)和指令类型。其中,在实例成员为实例成员变量的时候,实例成员的第一标识采用fieldid进行表示;在实例成员为实例成员方法的时候,实例成员的第一标识采用methodid进行表示。[0193]然后,用于生成应用程序的控制设备,在得到重定位表格之后,该控制设备将应用程序和重定位表格,上传至网络设备中。进而,网络设备等待需要安装应用程序的终端设备,去获取重定位表格。[0194]用于生成应用程序的控制设备,在生成应用程序的时候,采用编译器对应用程序进行编译,得到与可执行文件对应的重定位表格。由于应用程序中包括至少一个实例成员,可执行文件中包括与每一个实例成员对应的指令;指令中包括实例成员的偏移量;实例成员的偏移量,指的是实例成员相对于对象基地址的偏移量。在控制设备初始生成应用程序的时候,指令中的实例成员的偏移量,指的是实例成员的原始偏移量。[0195]由于问指令中包括实例成员的偏移量,并且应用程序与可执行文件会一起被公布,进而在终端设备安装了应用程序之后,电子设备可以根据指令,确定出指令中的实例成员的偏移量;电子设备根据实例成员的偏移量,在应用程序中访问到实例成员。可知,指令用访问实例成员。[0196]由于实例成员的偏移量被记录在指令中,从而在需要对实例成员进行修正的时候,是需要对与实例成员对应的指令中记录的偏移量进行修正(patch),即,对与实例成员对应的指令进行修正。[0197]202、根据重定位表格,确定待修正偏移量的指令在可执行文件中的位置,并确定待修正偏移量的指令所对应的实例成员。[0198]示例性地,本步骤可以参见图13所示步骤102,不再赘述。并且,介绍如下内容。[0199]一个示例中,电子设备在获取到重定位表格之后,可以检测是否需要对可执行文件的指令进行修正(patch)。[0200]一个示例中,电子设备根据哈希值,判断是否需要对与应用程序对应的可执行文件的指令进行修正(patch)。示例性地,每一个系统库(系统的系统库),具有元数据(metadata)的哈希值。例如,元数据包含了类元数据(classmetadata)、实例成员变量元数据(fieldmetadata),实例成员方法元数据(methodmetadata);举例来说,类元数据(classmetadata)中包括了类(class)的大小(size)、变量类型(fieldtype)、变量名字(fieldname)、变量大小(fieldsize)、方法名字(methodname)、方法签名(methodsignature)、虚函数表(vtable)指针、等等,但是,类元数据(classmetadata)中不包括实例成员方法的实现代码。并且,对可执行文件的指令进行修正的时候,需要记录应用程序的实例成员所依赖的系统的系统库的名字和哈希值。从而,在系统升级之后,电子设备在获取到重定位表格之后,电子设备将应用程序中所记录的系统库的哈希值、升级后的系统的哈希值(升级后的系统的系统库的哈希值),两者进行比较;电子设备在确定两者一致的时候,确定不需要对与应用程序对应的可执行文件的指令进行修正;电子设备在确定两者不一致的的时候,确定需要对与应用程序对应的可执行文件的指令进行修正。203、根据与实例成员对应的指令偏移量,确定可执行文件中的指令,其中,指令中包括实例成员的第二偏移量,第二偏移量是实例成员的原始偏移量。[0201]电子设备可以读取到应用程序中的每一个实例成员。由于每一个实例成员具有第一标识,并且,重定位表格中具有实例成员的第一标识,重定位表格中包括具有对应关系的指令偏移量、第一标识和指令类型;从而,电子设备可以根据每一个实例成员的第一标识,从重定位表格中读取到与每一个实例成员的第一标识对应的指令偏移量和指令类型。[0202]举例来说,表3示出了重定位表格的举例。如表3所示,重定位表格中提供了两个实例成员的重定位信息;实例成员变量m的第一标识fieldid为b,实例成员变量m所继承的类的第二标识classid为a,实例成员变量m的指令的偏移量offset为12,实例成员变量m的指令的指令类型为1;实例成员方法n的第一标识methodid为d,实例成员方法n所继承的类的第二标识classid为c,实例成员方法n的指令的偏移量offset为24,实例成员方法n的指令的指令类型为2。[0203]表3重定位表格[0204]offsetclassidfieldid/methodid指令类型12ab124cd2[0205]对于重定位表格中每一个第一标识所指示的实例成员来说,电子设备已经从重定位表格中读取到实例成员的指令偏移量;指令偏移量是与实例成员对应的指令在可执行文件中的偏移量。从而,电子设备可以根据实例成员的指令偏移量,从可执行文件中确定出与实例成员对应的指令。[0206]对于重定位表格中每一个第一标识所指示的实例成员来说,电子设备在从可执行文件中确定出与实例成员对应的指令之后,由于指令中包括实例成员的原始的偏移量,从而,电子设备可以从指令中读取到实例成员的原始的偏移量。[0207]203、计算实例成员的当前的实际偏移量,其中,实际偏移量为对实例成员的原始的成员偏移量进行修正后的偏移量。[0208]一个示例中,步骤203包括以下几种实现方式。[0209]步骤203的第一种实现方式、在实例成员为实例成员变量时,从当前实例成员变量所继承的类中的最高层的类开始,遍历当前实例成员变量所继承的每个类,将每个类中的实例成员变量进行对齐排列,得到每个类中的实例成员变量的偏移量;确定位于当前实例成员变量之前的前一实例成员变量的偏移量、前一实例成员变量的大小、当前实例成员变量与前一实例成员变量之间的空间填充大小,三者之和为当前实例成员变量的实际偏移量。[0210]步骤203的第二种实现方式、在实例成员为虚函数时,从当前虚函数所继承的类中的最高层的类开始,遍历当前虚函数所继承的每个类,计算每个类中的虚函数的指针的偏移量,得到虚函数表;确定虚函数表中位于当前虚函数之前的前一虚函数的指针的偏移量、当前虚函数的指针的长度之和,为当前虚函数的实际偏移量。[0211]示例性地,电子设备还需要计算出个实例成员的实际偏移量。[0212]一个示例中,电子设备根据获取到的重定位表格,确定出每一个实例成员的第一标识和第二标识,第一标识是实例成员的标识,第二标识是实例成员所归属的类的标识。电子设备根据第一标识和第二标识,确定实例成员的实际偏移量。一个示例中,由于第一标识指示出了实例成员的实例成员信息,第二标识指示出了实例成员所继承的类的类信息,从而,终端设备可以根据实例成员的实例成员信息、实例成员所继承的类的类信息,计算出实例成员的实际偏移量。[0213]一个示例中,在实例成员为实例成员变量时,实例成员变量有一个父类,该父类还有自己的父类,进而实例成员变量对应了一个继承链,该继承链中包括了实例成员变量所继承的父类、该父类自己所继承的父类。从而,在计算实例成员变量的实际偏移量时,需要从实例成员变量所继承的类中的最高层的类开始,遍历实例成员变量所继承的每一个类,将每一个类中的实例成员变量进行排列(此时,已经对实例成员变量进行了对齐),并且,排列的时候,可以确定出相邻实例成员变量之间的空间填充大小(即,空洞的大小)。然后,得到每一个实例成员变量的偏移量。将位于当前实例成员变量之前的前一实例成员变量的偏移量、前一实例成员变量的大小、当前实例成员变量与前一实例成员变量之间的空间填充大小,三者进行求和,得到实例成员变量的实际偏移量。[0214]需要注意的是:位于当前实例成员变量之前的前一实例成员变量,若是原始类型(例如int),则前一实例成员变量的大小是它本身的大小;:位于当前实例成员变量之前的前一实例成员变量,若引用类型,则前一实例成员变量的大小,是前一实例成员变量所对应的指针的大小。[0215]另一个示例中,在实例成员为虚函数时,虚函数有一个父类,该父类还有自己的父类,进而虚函数对应了一个继承链,该继承链中包括了虚函数所继承的父类、该父类自己所继承的父类。从而,在计算虚函数的实际偏移量时,需要遍历虚函数所继承的所有类,去访问类的原数据,进而访问函数原数据(函数原数据包括了函数名、函数类型);然后遍历函数原数据,对于函数原数据中的虚函数,计算每个类中的虚函数的指针的偏移量,得到虚函数表。此时,虚函数表中包括每一个虚函数的偏移量,其中,每一个虚函数的偏移量,根据位于该虚函数之前的各个虚函数的指针所计算出来的。此时,将虚函数表中位于当前虚函数之前的前一虚函数的指针的偏移量、当前虚函数的指针的长度之和,作为当前虚函数的实际偏移量。[0216]举例来说,由于虚函数表中存放的都是虚函数的地址(这个地址可以称作“指针”);此时,当前虚函数的实际偏移量为n 4,n是虚函数表中位于当前虚函数之前的前一虚函数的指针的偏移量,4是当前虚函数的指针的长度。需要注意的是:每一个类具有对应的虚函数表。[0217]204、将实例成员的原始的成员偏移量,修正为实际偏移量。[0218]一个示例中,重定位表格中包括指令类型;指令类型用于指示对待修正偏移量的指令中的立即数进行编码时的编码方式,编码方式包括编码位置。[0219]步骤204具体包括:根据指令类型所指示的编码方式,将实际偏移量写入待修正偏移量的指令中的特定比特位上,特定比特位为编码方式中的编码位置所指示的比特位。[0220]示例性地,对于重定位表格中每一个第一标识所指示的实例成员来说,电子设备从重定位表格中读取到与实例成员对应的指令的指令类型;由于指令类型指出了编码方式,从而,终端设备可以根据指令类型,对指令中的实例成员的偏移量进行修正,即,对实例成员的原始的偏移量进行修正。此时,重定位表格中包括指令类型(重定位表格中的指令类型,关注的是立即数的编码方式)。例如,指令类型指示出指令为str、ldr等指令类型,不同的指令类型对应了针对于立即数的不同的编码方式。编码方式包括了编码位置。编码方式的影响因素,例如有,字节宽度(左移、右移);字节宽度影响编码方式,进而影响了编码位置。[0221]可知,编码位置指示出了特定比特位,特定比特位是用于存放实例成员的偏移量的比特位。电子设备就可以根据令类型所指示的编码方式,将实际偏移量写入到指令中的特定比特位上。从而得到修正后的指令,进而得到修正后的可执行文件。[0222]举例来说,对于表2所示的示例,实例成员变量m的第一标识fieldid为b,实例成员变量m所继承的类的第二标识classid为a,实例成员变量m的指令的偏移量为16,实例成员变量m的指令的指令类型为1。终端设备可以读取到软件控制程序中的实例成员变量m的第一标识fieldid为b;电子设备根据第一标识fieldid为b,从重定位表格中,获取到实例成员变量m的指令偏移量为12;终端设备根据指令偏移量12,可以寻找到指令“strw0,[x20,#16]”,该指令“strw0,[x20,#16]”是需要被修正的指令,且该指令是用于指示出实例成员变量m的指令。电子设备在寻找到指令“strw0,[x20,#16]”之后,可以读取到寻找到指令“strw0,[x20,#16]”中的立即数16,立即数16是实例成员变量m的原始偏移量。终端设备需要对立即数16进行修正;电子设备根据实例成员变量m的指令的指令类型1所指示的编码方式,对立即数16进行修正(patch),进而,终端设备对指令“strw0,[x20,#16]”进行修正(patch)。[0223]205、加载并运行修正后的可执行文件,其中,修正后的可执行文件按照修正后的指令运行。[0224]一个示例中,步骤205具体包括:根据修正后的指令,访问实例成员。[0225]示例性地,在依据重定位表格,修正了可执行文件的指令之后,就可以加载修正后的可执行文件,进而运行修正后的可执行文件。[0226]此时由于对可执行文件的指令中的实例成员的偏移量进行了修正,此时,修正后的指令中的偏移量,是实例成员的实际偏移量,该实际偏移量指示出了实例成员的真实位置。在运行修正后的可执行文件的时候,是依据可执行文件中的已经修正了的指令,访问对应的实例成员;进而,对实例成员进行正确的访问。[0227]举例来说,对指令“strw0,[x20,#16]”进行修正之后,例如将立即数16修正为立即数20;立即数20指示出了实例成员变量m的真实偏移量,从而,真实设备可以根据立即数20,访问到实例成员变量m。[0228]本实施例,在上述实施例的基础上,控制设备或者网络设备可以提供出重定位表格,重定位表格中包括具有对应关系的指令偏移量、指令类型、实例成员的额信息,指令偏移量是指令在可执行文件中的偏移量,指令类型指示出编码方式。电子设备可以获取重定位表格之后,根据重定位表格中的指令偏移量,读取到用于可执行文件中的指令;指令中包括实例成员的原始的偏移量;电子设备还需要计算出实例成员的真实偏移量;然后,根据重定位表格中的指令类型所指示的编码方式,对访指令中的偏移量替换为实例成员的真实偏移量,进而对指令进行修正;电子设备可以根据修正后的指令,正确的访问到实例成员。对用于编译实例成员的指令进行修正了,减小了代码的开销,也减少了应用程序占用的内存空间和存储空间;并且,只需要对需要修正的实例成员的指令进行修正就行了,由于不需要对实例成员的访问去添加额外指令,可以减少指令开销。一个示例中,对应用程序中的解耦类进行偏移量的修正,解耦类为受到系统布局的影响的类,即,解耦类为需要继承系统中的类(除去系统中的object)的类。[0229]图18为本技术实施例提供的又一种可执行文件处理方法的流程示意图。如图18所示,该方法包括:[0230]301、根据至少一个待修正偏移量的指令,生成与可执行文件对应的重定位表格,重定位表格用于指示待修正偏移量的指令在可执行文件中的位置。[0231]302、将重定位表格发送给电子设备,其中,重定位表格用于修正待修正偏移量的指令所对应的实例成员的的偏移量。[0232]一个示例中,步骤302具体包括:[0233]接收电子设备在更新系统时发送的可执行文件的信息;将与可执行文件的信息对应的重定位表格,发送给电子设备;或者,接收电子设备发送的软件版本信息;将与软件版本信息对应的重定位表格和可执行文件,发送给电子设备。[0234]一个示例中,重定位表格中包括指令偏移量、指令类型、指令的实例成员;其中,指令偏移量为待修正偏移量的指令在可执行文件中的偏移量,指令类型用于指示对待修正偏移量的指令中的立即数进行编码时的编码方式。[0235]一个示例中,重定位表格,具体用于根据实例成员的当前的实际偏移量,修正待修正偏移量的指令所对应的实例成员的的偏移量;其中,实际偏移量为对实例成员的原始的成员偏移量进行修正后的偏移量。[0236]一个示例中,指令中包括操作码和操作数,操作码用于指示指令类型,操作数用于指示待运算的数据及数据所在的单元地址。[0237]本实施例可以参见上述实施例的介绍,不再赘述。[0238]本实施例,通过获取与可执行文件对应的重定位表格,其中,重定位表格用于指示至少一个待修正偏移量的指令;根据重定位表格,确定待修正偏移量的指令在可执行文件中的位置,并确定待修正偏移量的指令所对应的实例成员;修正实例成员的偏移量。在初次安装系统、或者初次安装应用程序、或者更新系统、或者更新应用程序时,电子设备需要对可执行文件的指令中的实例成员的偏移量进行修正,电子设备首先获取与获取与可执行文件对应的重定位表格,进而依据重定位表格,找到待修正偏移量的指令,就可以对指令中的实例成员的偏移量进行修正。本实施例提供的方案,不需要为每一实例成员增加一个全局变量;只需要为应用程序的各实例成员,提供一个重定位表格,根据重定位表格中信息就可以对实例成员的偏移量进行修正,即,对用于编译实例成员的指令进行修正了,减小了代码的开销,也减少了应用程序占用的内存空间和存储空间;并且,只需要对需要修正的实例成员的指令进行修正就行了,由于不需要对实例成员的访问去添加额外指令,可以减少指令开销。并且,本实施例提供的方案,由于重定位表格可以独立于应用程序,本实施例提供的方案的执行过程的代码,不需要在应用程序中布置,进而,若本实施例提供的方案发生在应用程序的升级或更新过程中,不会增加应用程序的运行时的开销。进一步的,由于重定位表格可以独立于应用程序,本实施例提供的方案的执行过程,不需要在应用程序的运行过程中执行。[0239]图19为本技术实施例提供的一种处理器的结构示意图。如图19所示,处理器191应用于电子设备,处理器191,用于:[0240]获取与可执行文件对应的重定位表格,其中,重定位表格用于指示至少一个待修正偏移量的指令;[0241]根据重定位表格,确定待修正偏移量的指令在可执行文件中的位置,并确定待修正偏移量的指令所对应的实例成员;[0242]修正实例成员的偏移量。[0243]一个示例中,处理器191获取与可执行文件对应的重定位表格时,具体用于:[0244]在确定更新系统时,向网络设备发送可执行文件的信息;接收网络设备发送的与可执行文件的信息对应的重定位表格;或者,向网络设备发送软件版本信息;接收网络设备发送的与软件版本信息对应的重定位表格和可执行文件。[0245]一个示例中,重定位表格中包括指令偏移量、指令类型、指令的实例成员;其中,指令偏移量为待修正偏移量的指令在可执行文件中的偏移量,指令类型用于指示对待修正偏移量的指令中的立即数进行编码时的编码方式。[0246]一个示例中,处理器191在修正实例员的偏移量之前,还用于:[0247]计算实例成员的当前的实际偏移量,其中,实际偏移量为对实例成员的原始的成员偏移量进行修正后的偏移量;[0248]处理器修正实例成员的偏移量时,具体用于:将实例成员的原始的成员偏移量,修正为实际偏移量。[0249]一个示例中,在实例成员为实例成员变量时,处理器191计算实例成员的实际偏移量时,具体用于:[0250]从当前实例成员变量所继承的类中的最高层的类开始,遍历当前实例成员变量所继承的每个类,将每个类中的实例成员变量进行对齐排列,得到每个类中的实例成员变量的偏移量;确定位于当前实例成员变量之前的前一实例成员变量的偏移量、前一实例成员变量的大小、当前实例成员变量与前一实例成员变量之间的空间填充大小,三者之和为当前实例成员变量的实际偏移量。[0251]一个示例中,处理器191在实例成员为虚函数时,计算实例成员的实际偏移量时,具体用于:[0252]从当前虚函数所继承的类中的最高层的类开始,遍历当前虚函数所继承的每个类,计算每个类中的虚函数的指针的偏移量,得到虚函数表;确定虚函数表中位于当前虚函数之前的前一虚函数的指针的偏移量、当前虚函数的指针的长度之和,为当前虚函数的实际偏移量。[0253]一个示例中,重定位表格中包括指令类型;指令类型用于指示对待修正偏移量的指令中的立即数进行编码时的编码方式,编码方式包括编码位置;[0254]处理器191将实例成员的原始的成员偏移量,修正为实际偏移量时,具体用于:根据指令类型所指示的编码方式,将实际偏移量写入待修正偏移量的指令中的特定比特位上,特定比特位为编码方式中的编码位置所指示的比特位。[0255]一个示例中,指令中包括操作码和操作数,操作码用于指示指令类型,操作数用于指示待运算的数据及数据所在的单元地址。[0256]一个示例中,处理器在修正实例成员的偏移量之后,还用于:[0257]加载并运行修正后的可执行文件,其中,修正后的可执行文件按照修正后的指令运行。[0258]一个示例中,处理器加载并运行修正后的可执行文件时,具体用于:根据修正后的指令,访问实例成员。[0259]在本实施例中,本实施例的处理器可用于执行上述方法的技术方案,其实现原理和技术效果类似,此处不再赘述。[0260]图20为本技术实施例提供的另一种处理器的结构示意图。如图20所示,处理器201应用于网络设备,处理器201,用于:根据至少一个待修正偏移量的指令,生成与可执行文件对应的重定位表格,重定位表格用于指示待修正偏移量的指令在可执行文件中的位置;将重定位表格发送给电子设备,其中,重定位表格用于修正待修正偏移量的指令所对应的实例成员的的偏移量。[0261]一个示例中,处理器201将重定位表格发送给电子设备时,具体用于:[0262]接收电子设备在更新系统时发送的可执行文件的信息;将与可执行文件的信息对应的重定位表格,发送给电子设备;或者,接收电子设备发送的软件版本信息;将与软件版本信息对应的重定位表格和可执行文件,发送给电子设备。[0263]一个示例中,重定位表格中包括指令偏移量、指令类型、指令的实例成员;其中,指令偏移量为待修正偏移量的指令在可执行文件中的偏移量,指令类型用于指示对待修正偏移量的指令中的立即数进行编码时的编码方式。[0264]一个示例中,重定位表格,具体用于根据实例成员的当前的实际偏移量,修正待修正偏移量的指令所对应的实例成员的的偏移量;其中,实际偏移量为对实例成员的原始的成员偏移量进行修正后的偏移量。[0265]一个示例中,指令中包括操作码和操作数,操作码用于指示指令类型,操作数用于指示待运算的数据及数据所在的单元地址。[0266]在本实施例中,本实施例的处理器可用于执行上述方法的技术方案,其实现原理和技术效果类似,此处不再赘述。[0267]图21为本技术实施例提供的一种电子设备的结构示意图。如图21所示,电子设备包括:发送器211、接收器212和处理器213。[0268]发送器211,用于执行电子设备的发送动作。接收器212,用于执行电子设备的接收动作。[0269]处理器213,用于执行计算机可执行程序代码中的指令;当处理器执行指令时,指令使电子设备执行上述方法实施例。[0270]一个示例中,终端设备还可以包括存储器214,存储器214用于存储终端设备的程序代码和数据。[0271]一个示例中,终端设备还可以包括总线215。其中,发送器211、接收器212、处理器213和存储器214可以通过总线215相互连接;总线215可以是pci总线或eisa总线等。上述总线215可以是外设部件互连标准(peripheralcomponentinterconnect,pci)总线或扩展工业标准结构(extendedindustrystandardarchitecture,eisa)总线等。为便于表示,图21中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。[0272]在本技术实施例中,上述各实施例之间可以相互参考和借鉴,相同或相似的步骤以及名词均不再一一赘述。[0273]或者,以上各个模块的部分或全部也可以通过集成电路的形式内嵌于该用设备的某一个芯片上来实现。且它们可以单独实现,也可以集成在一起。即以上这些模块可以被配置成实施以上方法的一个或多个集成电路,例如:一个或多个特定集成电路(applicationspecificintegratedcircuit,asic),或,一个或多个微处理器(digitalsingnalprocessor,dsp),或,一个或者多个现场可编程门阵列(fieldprogrammablegatearray,fpga)等。[0274]在本实施例中,电子设备可用于执行上述实施例提供的方法中的电子设备的动作,其实现原理和技术效果类似,此处不再赘述。[0275]图22为本技术实施例提供的一种网络设备的结构示意图。如图22所示,网络设备包括:发送器221、接收器222和处理器223。网络设备可以是控制设备。[0276]发送器222,用于执行网络设备的发送动作。接收器222,用于执行网络设备的接收动作。[0277]处理器223,用于执行计算机可执行程序代码中的指令;当处理器执行指令时,指令使网络设备执行上述方法实施例。[0278]一个示例中,终端设备还可以包括存储器224,存储器224用于存储终端设备的程序代码和数据。[0279]一个示例中,终端设备还可以包括总线225。其中,发送器222、接收器222、处理器223和存储器224可以通过总线225相互连接;总线225可以是pci总线或eisa总线等。上述总线225可以是外设部件互连标准(peripheralcomponentinterconnect,pci)总线或扩展工业标准结构(extendedindustrystandardarchitecture,eisa)总线等。为便于表示,图22中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。[0280]在本技术实施例中,上述各实施例之间可以相互参考和借鉴,相同或相似的步骤以及名词均不再一一赘述。[0281]或者,以上各个模块的部分或全部也可以通过集成电路的形式内嵌于该用设备的某一个芯片上来实现。且它们可以单独实现,也可以集成在一起。即以上这些模块可以被配置成实施以上方法的一个或多个集成电路,例如:一个或多个特定集成电路(applicationspecificintegratedcircuit,asic),或,一个或多个微处理器(digitalsingnalprocessor,dsp),或,一个或者多个现场可编程门阵列(fieldprogrammablegatearray,fpga)等。[0282]在本实施例中,网络设备可用于执行上述实施例提供的方法中的网络设备的动作,其实现原理和技术效果类似,此处不再赘述。[0283]本技术实施例提供了一种通信系统,该通信系统包括上述电子设备、和申述网络设备。网络设备用于接收电子设备提供的软件控制程序和重定位表格;网络设备可以将重定位表格发送给电子设备。[0284]本技术实施例提供了一种计算机可读存储介质,包括指令或程序,当其在计算机上运行时,使得计算机执行上述实施例提供的方法中的电子设备的各步骤。[0285]本技术实施例提供了另一种计算机可读存储介质,包括指令或程序,当其在计算机上运行时,使得计算机执行上述实施例提供的方法中的网络设备的各步骤。[0286]本技术实施例提供了其他一种计算机程序产品,包括程序代码,当计算机运行程序代码时,用于执行上述实施例提供的方法中的电子设备的各步骤。[0287]本技术实施例提供了其他一种计算机程序产品,包括程序代码,当计算机运行程序代码时,用于执行上述实施例提供的方法中的网络设备的各步骤。[0288]在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行计算机程序指令时,全部或部分地产生按照本技术实施例的流程或功能。计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如,同轴电缆、光纤、数字用户线(digitalsubscriberline,dsl))或无线(例如,红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,dvd)、或者半导体介质(例如,固态硬盘(solidstatedisk,ssd))等。[0289]本领域技术人员应该可以意识到,在上述一个或多个示例中,本技术实施例所描述的功能可以用硬件、软件、固件或它们的任意组合来实现。当使用软件实现时,可以将这些功能存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令或代码进行传输。计算机可读介质包括计算机存储介质和通信介质,其中通信介质包括便于从一个地方向另一个地方传送计算机程序的任何介质。存储介质可以是通用或专用计算机能够存取的任何可用介质。[0290]以上所述,仅为本技术的具体实施方式,但本技术的保护范围并不局限于此,任何熟悉本
技术领域
:的技术人员在本技术揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本技术的保护范围之内。因此,本技术的保护范围应以所述权利要求的保护范围为准。当前第1页12当前第1页12
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献