一种代码处理方法、装置及存储介质制造方法及图纸

技术编号:32852063 阅读:23 留言:0更新日期:2022-03-30 19:10
本申请公开了一种代码处理方法、装置及存储介质,包括:获取应用于源平台的基于低级语言的第一代码;对获取的第一代码进行反编译,得到中间表示IR;然后将该IR编译成应用于第一目标平台的基于低级语言的第二代码,其中,源平台与目标平台具有不同指令集。例如,可以将适用于x86平台的代码转换成适用于ARM平台的代码,无需由技术人员通过人工编写程序代码的方式实现软件代码的跨平台迁移。如此,可以实现将源平台的软件代码移植至目标平台上运行,从而可以降低构建第一目标平台的软件生态的难度。难度。难度。

【技术实现步骤摘要】
一种代码处理方法、装置及存储介质
[0001]本申请要求于2020年9月21日提交中国知识产权局、申请号为202010996387.6、申请名称为“一种代码处理方法、装置及存储介质”的中国专利申请的优先权,其全部内容通过引用结合在本申请中。


[0002]本申请实施例涉及代码处理
,尤其涉及一种代码处理方法、装置及存储介质。

技术介绍

[0003]x86平台,是一种英特尔公司主导开发的通用计算平台,具体是对一系列基于Intel 8086且向后兼容的中央处理器指令集架构的泛指。自1978年面世以来,x86平台,经过多年积累,演化出庞大且复杂的指令集。
[0004]实际应用中,开发人员通常会基于x86平台开发出能够应用于x86平台的各种软件,由此构建出了庞大的软件生态群。因此,目前很多应用软件可能仅能只能适用于x86平台,而无法适用于其它平台,如ARMv8平台(一种由ARM公司发布的支持64位指令集的处理器架构)等。
[0005]在构建ARMv8平台或者其它平台的软件生态时,通常是由技术人员根据该平台的代码规则(如指令集等)编写软件代码,以使得开发出的软件能够适用于该平台。但是,这种为该平台开发新软件的难度通常较高,软件开发效率较慢,这就使得构建ARMv8平台或者其它平台的软件生态的难度较高。为此,目前亟需一种能够降低构建平台软件生态难度的方法。

技术实现思路

[0006]本申请实施例提供一种代码处理方法、装置及存储介质,用以降低构建平台的软件生态的难度。
[0007]第一方面,本申请实施例提供一种代码处理方法,通过将源平台的软件代码移植至第一目标平台上,来降低构建平台的软件生态的难度,该源平台与第一目标平台属于不同平台,具体可以是具有不同的指令集。具体实现时,可以先获取应用于源平台的基于低级语言的第一代码,该第一代码例如可以是基于汇编语言或者机器语言的代码,并且能够被源平台所识别;然后,可以对获得的第一代码进行反编译,得到第一中间表示(intermediate representation,IR),该第一IR可以是与第一目标平台相关的IR,也可以是与第一目标平台无关的IR;接着,可以对该第一IR进行编译,得到应用于第一目标平台的基于低级语言的代码,而所得到的代码能够被第一目标平台所识别并运行,从而实现将源平台上的软件代码移植到第一目标平台。
[0008]同时,上述对软件代码进行反编译以及编译的过程,无需开发人员参与,从而可以实现开发人员与软件代码的隔离,降低开发人员接触软件代码的可能性。而对于软件运营
商,可以根据在移植到第一目标平台的软件代码进行优化和二次开发,便于软件运营商对移植到第一目标平台的软件代码进行维护。
[0009]其中,源平台例如可以是x86平台,而第一目标平台可以是ARM平台,具体是ARMv8平台等。当然,实际应用中,源平台可以是任意平台,而第一目标平台可以是与源平台不同的任意一种平台。
[0010]上述方法可以应用于本地,也可以应用于云端。其中,当应用于本地时,具体可以是应用于本地的终端或者服务器等,而当应用于云端时,具体可以是作为云服务的形式呈现给用户。
[0011]在一种可能的实施方式中,可以将源平台的第一代码,移植到任意目标平台。具体的,以分别移植到第一目标平台以及第二目标平台为例,除了可以通过上述反编译以及编译过程,得到应用于第一目标平台的基于低级语言的代码之外,也可以是在反编译过程中,根据第一代码得到第二平台对应的IR,该第二目标平台对应的IR与第一IR不同,所适用的目标平台不同,第一目标平台与第二目标平台具有不同的指令集,并且,第二目标平台与源平台也具有不同的指令集。即,当将源平台上的软件代码移植至任意平台上时,均可以采用上述反编译以及编译过程进行实现。
[0012]在一种可能的实施方式中,可以是向用户呈现目标平台选择界面,该目标平台选择界面可以呈现多个目标平台的候选,可供用户进行目标平台的选择。然后,可以响应用户针对于目标平台的选择操作,从多个目标平台中确定出用户所选择的目标平台,例如上述第一目标平台,可以是根据用户在目标平台选择界面上执行的选择操作进行确定的。
[0013]在一种可能的实施方式中,在对第一代码进行反编译的过程中,可以先获取第一代码额注解信息,该注解信息例如可以包括该第一代码中参数的类型、数量、跳转地址种类中的任意一种或者多种。这样,在进行反编译时,可以根据该注解信息对第一代码进行反编译,得到第一IR。以注解信息中的参数类型为例,假设第一代码中的参数的长度为64位,则在对第一代码进行反编译时所得到的第一IR中,参数的长度仍然可以是64位(如浮点型),而不会变更为32位等(如整型),如此,可以使得反编译前后参数的类型保持一致,降低第一IR中出现逻辑错误的可能。
[0014]在一种可能的实施方式中,在对第一代码进行反编译过程中,还可以对初始得到的IR进行优化。具体的,在对第一代码进行反编译后,可以得到第二IR,通常情况下,该第二IR可能具有一定的优化空间,比如,所生成的第二IR中对于数据的读取方式为每次读取64比特的数据,而第一目标平台具有一次性读取128比特的能力,可以将第二IR中的数据读取方式优化为每次读取128比特数据。具体实现时,可以根据第一目标平台,如根据第一目标平台的硬件/逻辑能力等,对第二IR进行优化,从而得到上述第一IR。这样,在后续对第一IR进行编译后,可以得到更高效的代码。
[0015]在一种可能的实施方式中,还可以进一步生成并呈现提示信息,该提示信息可以用于针对待检查项进行提示,其中,待检查项可以是基于第一目标平台与源平台之间的差异生成。比如,该提示信息,具体可以是通过高亮方式进行显示的源平台的指令以及与该指令具有相同语义的第一目标平台的指令,以便由用户基于该提示信息确定基于源平台的指令翻译得到的第一目标平台的指令是否准确。
[0016]在一种可能的实施方式中,当上述方法应用于云端时,用户可以向云端提供第一
代码,比如,用户可以通过终端或者客户端等向云端发送包含第一代码的代码处理请求,以使得云端获取第一代码;相应的,云端在接收到的第一代码进行相应的反编译以及编译处理后,可以将得到的应用于第一目标平台的基于低级语言的代码发送给用户,以使得用户获得其所需的代码。
[0017]在一种可能的实施方式中,在对第一代码进行反编译时,具体可以是根据源平台对应的指令语义库对第一代码进行反编译。例如,该指令语义库中可以包含多条源平台的指令所具有的语义,这样,在反编译过程中,可以遍历第一代码中的各条指令,并根据该指令语义库识别出该指令所具有语义,从而可以根据所识别出的指令语义将第一代码反编译成相应的编译器IR。
[0018]在一种可能的实施方式中,指令语义库还可以被用户进行修改,比如,用户可以向该指令语义库中添加单指令流多数据流(Single Instruction Multiple Data,SIMD)指令等,以用于识别出第一代码中的SIMD指令,本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种代码处理方法,其特征在于,所述方法包括:获取应用于源平台的基于低级语言的第一代码;对所述第一代码进行反编译,得到第一中间表示IR;将所述第一IR编译成应用于第一目标平台的基于低级语言的第二代码,所述源平台与所述第一目标平台具有不同指令集。2.根据权利要求1所述的方法,其特征在于,所述方法还包括:对所述第一代码进行反编译,得到第二目标平台对应的IR,所述第一IR与所述第二目标平台对应的IR不同,所述第一目标平台与所述第二目标平台具有不同指令集。3.根据权利要求1或2所述的方法,其特征在于,所述方法还包括:呈现目标平台选择界面;响应针对于目标平台的选择操作,从多个目标平台中确定出所述第一目标平台。4.根据权利要求1至3任一项所述的方法,其特征在于,所述对所述第一代码进行反编译,得到第一中间表示IR,包括:获取所述第一代码的注解信息,所述注解信息包括所述第一代码中参数的类型、数量、跳转地址种类中的任意一种或者多种;根据所述注解信息,对所述第一代码进行反编译,得到所述第一IR。5.根据权利要求1至4任一项所述的方法,其特征在于,所述对所述第一代码进行反编译,得到第一中间表示IR,包括:对所述第一代码进行反编译,得到第二IR;根据所述第一目标平台,对所述第二IR进行优化,得到所述第一IR。6.根据权利要求1至5任一项所述的方法,其特征在于,所述方法还包括:生成提示信息,所述提示信息用于针对待检查项进行提示,所述待检查项基于所述第一目标平台与所述源平台之间的差异生成;呈现所述提示信息。7.根据权利1至6任一项所述的方法,其特征在于,所述方法应用于云端,所述获取第一代码,包括:接收来自用户的第一代码;所述方法还包括:向所述用户发送所述第二代码。8.根据权利要求1至7任一项所述的方法,其特征在于,所述对所述第一代码进行反编译,包括:根据所述源平台对应的指令语义库,对所述第一代码进行反编译。9.根据权利要求8所述的方法,其特征在于,所述方法还包括:响应于针对所述指令语义库的修改操作,对所述指令语义库进行修改。10.根据权利要求1至9任一项所述的方法,其特征在于,所述获取应用于源平台的基于低级语言的第一代码,包括:获取应用于源平台的基于低级语言的第一代码以及基于高级语言的变量;所述对所述第一代码进行反编译,包括:将所述第一代码翻译成包括函数的第一IR,所述函数中包括形参,所述形参对应的实
参为所述变量。11.根据权利要求1至10任一项所述的方法,其特征在于,所述第一IR包括第一变量以及第二变量,所述第一变量具有第一逻辑地址,所述第二变量具有第二逻辑地址,所述第一逻辑地址与所述第二逻辑地址不同。12.根据权利要求1至11任一项所述的方法,其特征在于,所述对所述第一代码进行反编译,包括:根据所述目标平台函数调用约定或单指令流多数据流SIMD指令,对所述第一代码进行反编译。13.一种代码处理方法,其特征在于,所述方法包括:获取应用于源平台的基于低级语言的第一代码;输出第二代码,所述第二代码为应用于第一目标平台的基于低级语言的代码,所述第二代码是对所述第一代码进行处理得到的,所述源平台与所述第一目标平台具有不同指令集。14.根据权利要求13所述的方法,其特征在于,所述输出第二代码,包括:通过代码显示界面呈现所述第二代码。15.根据权利要求13或14所述的方法,其特征在于,所述方法应用于云端,所述获取第一代码,包括:接收来自用户的第一代码;所述输出所述第二代码,包括:向所述用户输出所述第二代码。16.根据权利要求13至15任一项所述的方法,其特征在于,所述方法还包括:呈现目标平台选择界面;响应针对于目标平台的选择操作,从多个目标平台中确定出所述第一目标平台。17.根据权利要求13至16任一项所述的方法,其特征在于,所述方法还包括:获取所述源平台对应的指令语义库,所述指令语义库用于对所述第一代码进行处理。18.根据权利要求17所述的方法,其特征在于,所述方法还包括:响应于针对所述指令语义库的修改操作,对所述指令语义库进行修改。19.根据权利要求13至18任一项所述的方法,其特征在于,所述方法还包括:生成提示信息,所述提示信息用于针对待检查项进行提示,所述待检查项基于所述第一目标平台与所述源平台之间的差异生成;呈现所述提示信息。20.根据权利要求13至19任一项所述的方法,其特征在于,所述方法还包括:呈现第一中间表示IR,所述第一IR是对所述第一代码进行反编译得到,所述第二代码是对所述第一IR进行编译得到。21.根据权利要求20所述的方法,其特征在于,所述方法还包括:呈现第二IR,所述第二IR是对所述第一代码进行反编译得到,所述第一IR是根据所述第一目标平台对所述第一IR进行优化得到。22.根据权利要求20或21所述的方法,其特征在于,所述方法还包括:响应于针对所述第一IR的修改操作,得到修改后的第一IR;
呈现第三代码,所述第三代码为应用于第一目标平台的基于低级语言的代码,所述第三代码是对所述修改后的第一IR进行编译得到的。23.根据权利要求20至22任一项所述的方法,其特征在于,所述方法还包括:呈现第三IR,所述第三IR是对所述第一代码进行反编译得到,所述第三IR用于生成应用于第二目标平台的基于低级语言的代码,所述第三IR与所述第一IR不同。24.根据权利要求13至23任一项所述的方法,其特征在于,方法还包括:响应于针对所述第二代码的修改操作,得到修改后的第二代码;输出所述修改后的第二代码。25.根据权利要求13至24任一项所述的方法,其特征在于,所述获取应用于源平台的基于低级语言的第一代码,包括:获取应用于源平台的基于低级语言的第一代码以及基于高级语言的变量。26.一种代码处理装置,其特征在于,所述装置包括:获取模块,用于获取应用于源平台的基于低级语言的第一代码;反编译模块,用于对所述第一代码进行反编译,得到第一中间表示IR;编译模块,用于将所述第一IR编译成应用于第一目标平台的基于低级语言的第二代码,所述源平台与所述第一目标平台具有不同指令集。27.根据权利要求26所述的装置,其特征在于,所述反编译模块,还用于对所述第一代码进行反编译,得到第二目标平台对应的IR,所述第一IR与所述第二目标平台对应的IR不同,所述第一目标平台与所述第二目标平台具有不同指令集。28.根据...

【专利技术属性】
技术研发人员:乐永年黄波惠卫锋罗靖
申请(专利权)人:华为技术有限公司
类型:发明
国别省市:

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

1