【技术实现步骤摘要】
运行软件的方法、装置以及机器可读存储介质
[0001]本申请实施例涉及软件处理领域,具体涉及一种运行软件的方法、装置以及机器可读存储介质。
技术介绍
[0002]二进制翻译(binary translation)技术可将一种指令集架构(instruction set architecture,ISA)中的指令序列转化成另一种指令集架构中的指令序列。相关技术主要采用动态翻译的方式进行二进制翻译。所谓动态翻译,指的是在二进制程序运行时对执行到的片段进行翻译。但是,动态翻译会导致软件运行过程出现延时。
技术实现思路
[0003]本申请实施例涉及一种运行软件的方法、装置以及机器可读存储介质,以降低翻译后的软件在运行过程中的延时。
[0004]第一方面,提供一种运行软件的方法,所述方法用于将第一软件从源机器移植至目标机器,所述源机器的处理器基于第一指令集架构,所述目标机器的处理器基于第二指令集架构,所述第一指令集架构与所述第二指令集架构不同,所述方法包括:对所述第一软件的源二进制代码进行静态翻译,得到目标二进制 ...
【技术保护点】
【技术特征摘要】
1.一种运行软件的方法,其特征在于,所述方法用于将第一软件从源机器移植至目标机器,所述源机器的处理器基于第一指令集架构,所述目标机器的处理器基于第二指令集架构,所述第一指令集架构与所述第二指令集架构不同,所述方法包括:对所述第一软件的源二进制代码进行静态翻译,得到目标二进制代码,其中所述源二进制代码为基于所述第一指令集架构的代码,所述目标二进制代码为基于所述第二指令集架构的代码,所述源二进制代码包括第一调用指令,所述第一调用指令所调用的函数地址由所述第一软件在运行过程中动态生成,在所述目标二进制代码中,所述第一调用指令被翻译成第二调用指令,所述第二调用指令用于调用所述第一调用指令的包装函数;在所述目标机器上运行所述第一软件,并在运行所述第一软件的过程中执行所述包装函数,以执行以下操作:响应于所述函数地址指向所述源二进制代码,跳转至所述目标二进制代码中的与所述函数地址对应的翻译地址;和/或响应于所述函数地址指向所述第一软件运行期间生成的代码,调用动态翻译引擎对所述第一软件运行期间生成的代码进行翻译。2.根据权利要求1所述的方法,其特征在于,所述包装函数还用于执行以下操作:响应于所述函数地址指向所述第二指令集架构的代码,对所述第一调用指令进行ABI转换,得到转换后的调用指令,并执行所述转换后的调用指令;和/或响应于所述函数地址指向所述第一指令集架构的代码,对所述第一调用指令进行ABI转换,得到所述第一调用指令的等价指令,并执行所述等价指令。3.根据权利要求2所述的方法,其特征在于,所述包装函数包括第一参数和第二参数,所述第一参数用于指示内存中的代码的类型,所述第二参数用于指示所述函数地址,其中所述函数地址指向的代码的类型包括以下类型中的一种或多种:第一类型,表示所述函数地址指向所述源二进制代码;第二类型,表示所述函数地址指向所述第一软件运行期间生成的代码;第三类型,表示所述源二进制代码翻译过程中生成的翻译代码;以及第四类型,表示所述函数地址指向所述第二指令集架构的原生代码。4.根据权利要求3所述的方法,其特征在于,所述第一参数的取值由所述目标机器上的动态加载器在加载所述第一软件时提供。5.根据权利要求1所述的方法,其特征在于,所述对所述第一软件的源二进制代码进行静态翻译,包括:对所述源二进制代码中的函数进行识别,得到第一函数集合;针对所述第一函数集合中的函数,以函数为单位进行所述静态翻译。6.根据权利要求5所述的方法,其特征在于,所述对所述源二进制代码中的函数进行识别,得到第一函数集合,包括:根据所述源二进制代码中的符号表对所述源二进制代码中的函数进行识别,得到第二函数集合;根据所述第二函数集合中的每个函数的内部调用指令对所述源二进制代码中的函数进行识别,得到第三函数集合;
确定所述第二函数集合和所述第三函数集合的并集,得到所述第一函数集合。7.根据权利要求1所述的方法,其特征在于,所述方法还包括:将所述目标二进制代码转换为中间表示;对所述中间表示进行优化,得到所述目标二进制代码的优化代码。8.根据权利要求1所述的方法,其特征在于,所述第一调用指令包括call指令、jump指令和条件跳转指令中的一种或多种。9.一种运行软件的装置,其特征在于,所述装置用于将第一软件从源机器移植至目标机器,所述源机器的处理器基于第一指令集架构,所述目标机器的处理器基于第二指...
【专利技术属性】
技术研发人员:吕蓊鉴,李根,黄能超,吴楠,徐霞丽,
申请(专利权)人:飞腾信息技术有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。