CN116126350A - 一种二进制翻译方法、二进制翻译器及电子设备 - Google Patents
一种二进制翻译方法、二进制翻译器及电子设备 Download PDFInfo
- Publication number
- CN116126350A CN116126350A CN202310407639.0A CN202310407639A CN116126350A CN 116126350 A CN116126350 A CN 116126350A CN 202310407639 A CN202310407639 A CN 202310407639A CN 116126350 A CN116126350 A CN 116126350A
- Authority
- CN
- China
- Prior art keywords
- instruction
- target
- code
- instructions
- system call
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/51—Source to source
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3005—Arrangements for executing specific machine instructions to perform operations for flow control
- G06F9/30069—Instruction skipping instructions, e.g. SKIP
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
- Executing Machine-Instructions (AREA)
Abstract
本发明实施例提供一种二进制翻译方法、二进制翻译器及电子设备,该方法包括:在翻译到源代码中的第一类指令时,在目标代码中的当前地址处将所述第一类指令翻译为宿主平台的第一目标指令;在翻译到源代码中的第二类指令时,在预置的翻译代码段中将所述第二类指令翻译为宿主平台的第二目标指令,并且在目标代码中的当前地址处设置预置跳转指令,所述预置跳转指令用于跳转至所述翻译代码段中的所述第二目标指令的代码段入口地址。本发明实施例提供的二进制翻译方法具有静态翻译的优点,并且可以保证静态二进制翻译中指令跳转的正确性,使得一次翻译得到的目标程序可以被多次使用,具有较低的运行成本。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种二进制翻译方法、二进制翻译器及电子设备。
背景技术
二进制翻译可以将运行在一种体系结构平台的源程序转换为运行在另一种体系结构平台的目标程序。二进制翻译是近年来计算机技术领域的研究热点之一。
源程序运行的体系结构平台被称作GUEST(客户)平台,目标程序运行的体系结构平台被称作HOST(宿主)平台。例如,二进制翻译可以使x86平台的程序运行在LoongArch(龙架构)平台上。
二进制翻译可以分为静态二进制翻译和动态二进制翻译。动态二进制翻译是在程序运行时对执行到的代码片段进行翻译,程序的运行需要依赖于翻译器,运行成本较高。静态二进制翻译是在程序运行之前对其代码进行翻译,程序的运行不需要依赖于翻译器,运行成本较低。但是,由于GUEST平台和HOST平台的指令集不同,在指令的翻译过程可能会导致指令数量“膨胀”,如源程序中的一条指令可能被翻译为目标程序中的多条指令,此时,原有地址空间无法容纳膨胀后的多条指令,后续指令地址依次发生改变,导致跳转关系发生变化,不能再沿用源程序中的跳转关系。因此,如何保证指令跳转的正确性是静态二进制翻译需要解决的一个重点问题。
发明内容
本发明实施例提供一种二进制翻译方法、二进制翻译器及电子设备,可以解决静态二进制翻译中由于指令膨胀导致指令跳转的正确性难以保证的问题。
为了解决上述问题,本发明实施例公开了一种二进制翻译方法,应用于二进制翻译器,所述二进制翻译器用于将源代码翻译为目标代码,所述源代码为客户平台的二进制代码,所述目标代码为宿主平台的二进制代码,所述方法包括:
在翻译到所述源代码中的第一类指令时,在所述目标代码中的当前地址处将所述第一类指令翻译为宿主平台的第一目标指令;
在翻译到所述源代码中的第二类指令时,在预置的翻译代码段中将所述第二类指令翻译为宿主平台的第二目标指令,并且在所述目标代码中的当前地址处设置预置跳转指令,所述预置跳转指令用于跳转至所述翻译代码段中的所述第二目标指令的代码段入口地址;
所述第一类指令包括一对一指令;所述第二类指令包括一对多指令;其中,一条一对一指令被翻译为一条第一目标指令;一条一对多指令被翻译为两条以上第二目标指令。
另一方面,本发明实施例公开了一种二进制翻译器,所述二进制翻译器用于将源代码翻译为目标代码,所述源代码为客户平台的二进制代码,所述目标代码为宿主平台的二进制代码,所述二进制翻译器包括核心翻译模块,所述核心翻译模块包括:
第一翻译单元,用于在翻译到所述源代码中的第一类指令时,在所述目标代码中的当前地址处将所述第一类指令翻译为宿主平台的第一目标指令;
第二翻译单元,用于在翻译到所述源代码中的第二类指令时,在预置的翻译代码段中将所述第二类指令翻译为宿主平台的第二目标指令,并且在所述目标代码中的当前地址处设置预置跳转指令,所述预置跳转指令用于跳转至所述翻译代码段中的所述第二目标指令的代码段入口地址;
所述第一类指令包括一对一指令;所述第二类指令包括一对多指令;其中,一条一对一指令被翻译为一条第一目标指令;一条一对多指令被翻译为两条以上第二目标指令。
再一方面,本发明实施例还公开了一种电子设备,所述电子设备包括有存储器,以及一个或者一个以上的程序,其中一个或者一个以上程序存储于存储器中,且经配置以由一个或者一个以上处理器执行前述的二进制翻译方法。
本发明实施例还公开了一种可读存储介质,当所述存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行前述的二进制翻译方法。
本发明实施例包括以下优点:
本发明实施例提供了一种二进制翻译方法,该二进制翻译方法是一种基于插桩式的静态二进制翻译方法。本发明实施例在翻译到第一类指令时,在目标代码中的当前地址处直接进行一对一翻译。在翻译到第二类指令时,在目标代码中的当前地址处设置预置跳转指令,该预置跳转指令用于跳转至目标地址,该目标地址为预置的翻译代码段中将所述第二类指令翻译为宿主平台的第二目标指令的代码段入口地址。由此,本发明实施例在翻译到第二类指令(如一对多翻译的指令)时,也可以实现在当前地址处进行一对一翻译,只是此时的一对一翻译实际上是将第二类指令翻译为预置跳转指令,通过预置跳转指令跳转至真正的翻译后的目标指令。所述第一类指令包括一对一指令;所述第二类指令包括一对多指令;其中,一条一对一指令被翻译为一条第一目标指令;一条一对多指令被翻译为两条以上第二目标指令。通过本发明实施例的二进制翻译方法,可以使得源代码中的每条指令在源代码中的偏移位置,与翻译后的目标代码中的每条对应的目标指令在目标代码中的偏移位置相同,从而可以沿用源程序中的跳转关系,实现在偏移地址不变的前提下,保证指令的静态翻译的正确性。由此,本发明实施例提供的二进制翻译方法具有静态翻译的优点,并且解决了指令膨胀导致跳转地址发生改变的问题,可以保证静态二进制翻译中指令跳转的正确性,使得一次翻译得到的目标程序可以被多次使用,并且目标程序的运行不依赖于翻译器,具有较低的运行成本。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例的描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本发明的一种二进制翻译方法实施例的步骤流程图;
图2是本发明的一种增加翻译代码段的目标代码的地址排布结构示意图;
图3是本发明中翻译第一类指令和第二类指令的跳转关系示意图;
图4是本发明一个示例中的二进制翻译器的结构示意图;
图5是本发明的一种二进制翻译器中的核心翻译模块的结构框图;
图6是本发明示例提供的一种用于二进制翻译的电子设备的结构框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明的说明书和权利要求书中的术语“第一”、“第二”等是用于区别类似的对象,而不用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施,且“第一”、“第二”等所区分的对象通常为一类,并不限定对象的个数,例如第一对象可以是一个,也可以是多个。此外,说明书以及权利要求中的术语“和/或”用于描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。本发明实施例中术语“多个”是指两个以上,两个以上包括两个本身,其它量词与之类似。
参照图1,示出了本发明的一种二进制翻译方法实施例的步骤流程图,所述方法应用于二进制翻译器,所述二进制翻译器用于将源代码翻译为目标代码,所述源代码为客户平台的二进制代码,所述目标代码为宿主平台的二进制代码,所述方法具体可以包括如下步骤:
步骤101,在翻译到所述源代码中的第一类指令时,在所述目标代码中的当前地址处将所述第一类指令翻译为宿主平台的第一目标指令;
步骤102、在翻译到所述源代码中的第二类指令时,在预置的翻译代码段中将所述第二类指令翻译为宿主平台的第二目标指令,并且在所述目标代码中的当前地址处设置预置跳转指令,所述预置跳转指令用于跳转至所述翻译代码段中的所述第二目标指令的代码段入口地址;所述第一类指令包括一对一指令;所述第二类指令包括一对多指令;其中,一条一对一指令被翻译为一条第一目标指令;一条一对多指令被翻译为两条以上第二目标指令。
本发明实施例提供的二进制翻译方法,可应用于二进制翻译器,所述二进制翻译器可用于将源代码翻译为目标代码,所述源代码为客户(GUEST)平台的二进制代码,所述目标代码为宿主(HOST)平台的二进制代码。本发明实施例提供的二进制翻译方法可以解决二进制层面的程序跨指令集架构运行的问题,可以将一种指令集架构中的指令序列转化成另一种指令集架构中的指令序列。例如,可以将x86指令集架构中的指令序列翻译成LoongArch指令集架构中的指令序列,反之亦然。本发明实施例提供的二进制翻译方法可用于将源程序从客户平台移植至宿主平台。
本发明实施例中,所述源程序可以是任意类型的软件程序。例如,所述源程序可以是普通的应用软件程序,如图形处理软件程序、办公软件程序、游戏软件程序等。所述源程序也可以是基于语言虚拟机(如java虚拟机或 .net虚拟机)的软件程序等。
客户平台可以指原本运行源程序的机器。客户平台的处理器可以是基于第一指令集架构的处理器。该第一指令集架构例如可以是 x86指令集架构,也可以是arm指令集架构(如arm64)等。源程序是基于第一指令集架构开发的软件程序,因此,该源程序可以在客户平台上正常运行。宿主平台可以指希望移植源程序的机器。宿主平台的处理器可以是基于第二指令集架构的处理器。该第二指令集架构与第一指令集架构可以为不同的指令集架构。例如,第一指令集架构为x86指令集架构,第二指令集架构为arm指令集架构。或者,第一指令集架构为arm指令集架构,第二指令集架构为x86指令集架构,等等。
需要说明的是,所述源代码指源程序的二进制代码,源程序的二进制代码可以为基于第一指令集架构的代码,源程序可运行在客户(GUEST)平台。所述目标代码指目标程序的二进制代码,目标程序的二进制代码为基于第二指令集架构的代码,目标程序可运行在宿主(HOST)平台。如果希望在宿主平台上运行该源程序,则需要将源程序的二进制代码翻译成目标程序的二进制代码。
本发明实施例的目的在于提供一种静态的二进制翻译器,该二进制翻译器在读取客户平台的二进制代码后,将其翻译成宿主平台的二进制代码,翻译生成的目标程序无需依赖二进制翻译器即可正确执行,运行过程中没有翻译开销,运行成本较低。
为使得指令膨胀的情况下,可以保证静态二进制翻译中指令跳转的正确性,本发明实施例提供的二进制翻译方法,是一种基于插桩式的静态二进制翻译方法。本发明实施例将源代码中待翻译的指令分为第一类指令和第二类指令。第一类指令包括一对一指令,指可以在当前地址处进行一对一翻译的指令,一条一对一指令可以被翻译为一条第一目标指令。第二类指令包括一对多指令,指不能在当前地址处进行一对一翻译的指令,一条一对多指令可以被翻译为两条以上第二目标指令,指令数量发生变化。因此,对于第二类指令,需要在当前地址处进行插桩,以处理客户平台和宿主平台之间的指令差异。所述指令差异包括但不限于翻译前后指令数量的差异以及操作系统内核支持的系统调用指令的差异。
本发明实施例在翻译到第一类指令时,可以在目标代码中的当前地址处直接进行一对一翻译。在翻译到第二类指令时,通过在目标代码中的当前地址处设置预置跳转指令,该预置跳转指令用于跳转至目标地址,该目标地址为预置的翻译代码段中将所述第二类指令翻译为宿主平台的第二目标指令的代码段入口地址。由此,本发明实施例在翻译到第二类指令(如一对多翻译的指令)时,看起来也实现了在当前地址处进行一对一翻译,只是此时的一对一翻译实际上是将第二类指令翻译为预置跳转指令,通过预置跳转指令跳转至真正的翻译后的目标指令。由此使得源代码中的每条指令在源代码中的偏移位置,与翻译后的目标代码中的每条对应的目标指令在目标代码中的偏移位置相同,从而可以沿用源程序中的跳转关系,实现在偏移地址不变的前提下,保证指令的静态翻译的正确性。
一对一指令被翻译前后,指令数量不发生变化。示例性地,一对一指令可以包括源代码中的ADD指令(加法指令)。在客户平台,ADD指令是一条指令,如“Add r1,r2,r3”,表示将寄存器r1中的数值与寄存器r2中的数值相加后,将结果存入寄存器r3。该Add指令被翻译为宿主平台中对应的ADD指令后,仍然是一条指令,如“Add r1,r2,r3”,指令数未发生变化。
一对多指令被翻译前后,指令数量会发生膨胀。示例性地,一对多指令可以包括源代码中的LD指令(访存指令)。在客户平台,客户平台使用的指令集架构支持的立即数的位数较长,如16bits,LD指令可以用一条指令表示,如“Ld r1,r1,0x1000”,表示从寄存器r1与0x1000的和的地址中取出值到寄存器r1。该LD指令被翻译为宿主平台中对应的LD指令时,由于宿主平台使用的指令集架构支持的立即数的位数较短,如12bits,则该LD指令变成了三条指令,指令数发生膨胀。
由于源程序中的一条指令可能被翻译为目标程序中的多条指令,因此翻译后的宿主平台的目标程序和客户平台的源程序的指令地址不同,导致源程序的跳转关系无法使用。对于直接跳转,二进制翻译器可以通过计算偏移得到新的跳转地址从而重新链接,但由于间接跳转的地址只能在程序运行时才能够正确获得,因此如何保证间接跳转的正确性是静态二进制翻译的一个重点问题。
本发明实施例的二进制翻译器可以将客户平台的二进制代码(源代码)翻译为宿主平台的二进制代码(目标代码),并且为保证间接跳转的正确性。本发明实施例在目标代码的代码段中增加了一段预留空间,本发明实施例中称为预置的翻译代码段。所述预置的翻译代码段可用于处理客户平台的二进制代码与宿主平台的二进制代码之间的差异性。所述差异性可以包括翻译前后指令数量的差异。例如,源代码中的一条指令可能被翻译为目标代码中的两条以上目标指令。
本发明实施例的二进制翻译方法,是一种基于插桩式的静态二进制翻译方法。插桩指的是,在翻译到所述源代码中的第二类指令时,在预置的翻译代码段中将所述第二类指令翻译为宿主平台的第二目标指令,并且在所述目标代码中的当前地址处设置预置跳转指令,所述预置跳转指令用于跳转至所述翻译代码段中的所述第二目标指令的代码段入口地址。本发明实施例通过预置跳转指令进行插桩,可以保证源程序中的指令在翻译后偏移地址不发生改变,因此可以沿用源程序的跳转关系,解决间接跳转产生的效率问题。本发明实施例在翻译到一对多指令时,在目标代码中的当前地址处设置预置跳转指令,并且在预置的翻译代码段中插入该一对多指令对应的第二目标指令,令该预置跳转指令的目标地址为所述翻译代码段中的所述第二目标指令的代码段入口地址,由此可以实现在一对多指令翻译后的偏移地址不变的情况下,保证一对多指令的正确执行。
参照图2,示出了本发明的一种增加翻译代码段的目标代码的地址排布结构示意图。如图2所示,ELF表示可执行文件的一种格式,.text表示代码段,.data表示数据段,.bass表示未初始化数据段,.trans表示本发明实施例中增加的翻译代码段。
在本发明的一种可选实施例中,所述方法还可以包括:在所述二进制翻译器的初始化阶段,分配目标代码所需的存储空间,并在所述目标代码的存储空间中预留翻译代码段的存储空间。本发明实施例可以在二进制翻译器的初始化阶段预留翻译代码段所需的存储空间。需要说明的是,本发明实施例对所述翻译代码段的位置不做限制。示例性地,所述翻译代码段可以位于目标代码的头部或尾部。
参照图3,示出了本发明中翻译第一类指令和第二类指令的跳转关系示意图。如图3所示,假设源代码中包括第一类指令如ADD指令,源代码中还包括第二类指令如LD指令。对于源代码中可以一对一翻译的指令,如客户平台的ADD指令等,可以在目标代码的当前地址处一对一地翻译为对应的宿主平台的目标指令。对于客户平台中无法被一对一翻译为宿主平台的指令,如图3中所述的LD指令,可以在目标代码的当前地址处设置一条预置跳转指令,其作用为跳转至真正的目标指令的地址,也就是初始化时预留的翻译代码段中该LD指令被翻译得到的第二目标指令的代码段入口地址。
如图3所示,源代码中的三条ADD指令,分别被一对一地翻译为目标平台的三条ADD指令。在翻译源代码中的一条LD指令(如:Ld r1,r1,0x1000)时,在目标代码的当前地址处设置一条预置跳转指令(如:b trans_code),该预置跳转指令的目标地址为翻译代码段中该LD指令对应的第二目标指令的代码段入口地址。这样,在执行目标程序时,当执行到该预置跳转指令时,会直接跳转至该预置跳转指令指向的目标地址处执行该LD指令真正对应的目标指令,执行完后返回目标程序的执行流。
需要说明的是,本发明实施例对所述预置跳转指令的具体结构不做限制。在本发明的一种可选实施例中,所述预置跳转指令可以为B跳转指令。
B跳转指令为无条件跳转指令。B跳转指令使程序跳转到指定的目标地址执行程序。当然,在具体实施中,所述预置跳转指令可以是任意类型的跳转指令。
本发明实施例中的预置跳转指令为无条件跳转指令,目前的主流处理器均为多发射处理器,每一个时钟周期会读取多条指令进入运算部件,但是由于指令之间的相关性,同一时钟周期发射的多条指令并不能完全同时执行,需要等待相关指令的执行结果,这就导致流水线中往往同时发射了许多指令,但需要更多的时钟周期执行,这就存在处理器空转的情况。本发明实施例利用无条件跳转指令作为预置跳转指令,无条件跳转指令无数据相关,可以在处理器空转时执行。例如,一个4发射的流水线在执行时,往往同一周期只能执行2条指令,如果在这时读取一条无条件跳转指令,则可以使同一周期执行3条指令,虽然指令数量增加,但执行时间不变。也即,执行本发明实施例的预置跳转指令不会额外增加执行时间,由此,本发明实施例通过在翻译第二类指令时设置预置跳转指令,可以实现更加高效的静态二进制翻译方法,该静态二进制翻译方法能够以更低的性能损耗,将客户平台的源程序翻译为宿主平台的目标程序,在宿主平台高效运行。
在本发明的一种可选实施例中,所述第二类指令还可以包括系统调用指令。
客户平台的源程序可以按照客户平台操作系统提供的系统调用接口申请系统资源,而宿主平台的操作系统提供的系统调用接口可能不同于客户平台,因此,本发明实施例的第二类指令还可以包括系统调用指令,通过对客户平台和宿主平台的系统调用指令的差异进行处理,使得源程序中的系统调用指令能够被正确翻译为宿主平台可执行的系统调用指令。
在本发明实施例中,系统调用指令的处理过程可以类似于一对多指令的处理过程。例如,在翻译到系统调用指令时,在预置的翻译代码段中将该系统调用指令翻译为宿主平台的第二目标指令,并且在目标代码中的当前地址处设置预置跳转指令,该预置跳转指令用于跳转至该翻译代码段中的该第二目标指令的代码段入口地址,通过预置跳转指令可以跳转至真正的翻译后的目标指令,在处理完客户平台与宿主平台的差异后,返回原有程序的执行流。
在本发明的一种可选实施例中,所述方法还可以包括:在所述二进制翻译器的初始化阶段,在所述预置的翻译代码段中的预留位置构建系统调用表;所述系统调用表中包括至少一个表项,每个表项包括一条客户平台的系统调用指令对应宿主平台的系统调用指令的代码段,每个表项还包括对应客户平台的系统调用指令的系统调用号。
本发明实施例的二进制翻译方法在二进制翻译器的初始化阶段可以构建一个系统调用表,所述系统调用表可以构建在预置的翻译代码段中的预留位置。本发明实施例对所述预留位置不做限制。所述系统调用表中的每一个表项包括一条客户平台的系统调用指令对应宿主平台的系统调用指令的代码段。示例性地,所述系统调用表中可以包括客户平台中所有系统调用指令对应宿主平台的系统调用指令的代码段。在该代码段中,实现了从客户平台的系统调用指令到宿主平台的系统调用指令的转换。
在本发明实施例中,所述系统调用表的每个表项还包括对应客户平台的系统调用指令的系统调用号。每个系统调用接口都有一个对应的系统调用号,当用户程序需要使用某个系统调用接口时,系统内核可以根据传入的系统调用号知道应用程序使用的是哪个系统调用接口。
在本发明的一种可选实施例中,步骤102中所述在所述目标代码中的当前地址处设置预置跳转指令,可以包括:
步骤S11、在翻译到所述源代码中的第二类指令,且所述第二类指令为系统调用指令时,从所述第二类指令中获取系统调用号;
步骤S12、在所述系统调用表中查询从所述第二类指令中获取的系统调用号,确定相匹配的目标表项;
步骤S13、将所述预置跳转指令的目标地址设置为所述目标表项的地址,并在所述目标代码中的当前地址处设置该预置跳转指令。
一个示例中,假设源代码中包括如下系统调用指令:“li v0,5001 syscall”。其中,li指令用于将5001送入寄存器v0中,其中5001是系统调用号。syscall表示该指令为系统调用指令。本发明实施例在翻译到该系统调用指令时,从该指令中获取系统调用号为5001。在翻译代码段中的系统调用表中查询该系统调用号,找到与该系统调用号相匹配的目标表项的地址。将预置跳转指令的目标地址设置为该目标表项的地址,并在目标代码中的当前地址处设置该预置跳转指令。
可选地,在步骤S21中查询到相匹配的目标表项的情况下,该目标表项的地址可以使用系统调用号和系统调用表的名称来表示。例如,在上述示例中,在翻译到系统调用指令:“li v0,5001 syscall”时,从该系统调用指令中获取系统调用号为5001,在系统调用表中存在该系统调用号对应的目标表项时,可以在目标代码中的当前地址处插入预置跳转指令为“li v0,5001 b syscall_table”。在该预置跳转指令中,5001为系统调用号,syscall_table为系统调用表的名称。该预置跳转指令表示跳转至系统调用表syscall_table中系统调用号5001所在目标表项的入口地址。
在具体实施中,本发明实施例在二进制翻译器的初始化阶段在预置的翻译代码段中构建系统调用表,该系统调用表中包括客户平台中所有系统调用指令对应宿主平台的系统调用指令的代码段。由此,对于源程序中任意一条客户平台的系统调用指令,都可通过设置预置跳转指令的方式,实现一对一翻译。该预置跳转指令的目标地址可以通过系统调用号和系统调用表的名称来表示,即可通过该预置跳转指令中的系统调用号查找得到该客户平台的系统调用指令在该系统调用表中对应的目标表项,进而跳转至该目标表项,保证系统调用的正确性。
可选地,本发明实施例还可以在宿主平台操作系统中进行相应系统调用指令的支持,在宿主平台操作系统中提供与客户平台操作系统相兼容的系统调用接口,使得一些无法在用户态实现的客户程序系统调用接口得以实现,即将原本仅在客户平台操作系统中存在的系统调用接口在宿主平台操作系统中也得以实现。这样,在翻译到第二类指令且第二类指令为系统调用指令时,只需要将客户平台的系统调用指令的系统调用号翻译为宿主平台的系统调用指令的系统调用号即可。
本发明实施例的二进制翻译器可以包括环境初始化模块(initialize BTtextSegment \Initialize Syscall Table)和核心翻译模块(translate core)。
其中,环境初始化模块用于在初始化阶段配置翻译代码段,以及在翻译代码段中初始化系统调用表,为后续正确翻译打下基础。核心翻译模块,用于对指令进行分类翻译,可以分为第一类指令和第二类指令。第一类指令包括一对一指令,可以一对一直接翻译为宿主平台的目标指令,在当前地址处直接生成即可。第二类指令包括一对多指令和系统调用指令。对于一对多指令,此类指令需要翻译为多条目标指令,可以在当前地址处设置预置跳转指令,跳转至翻译代码段中对应的目标指令,从而实现在地址不变的前提下,对指令的正确翻译。系统调用指令,可以在当前地址处设置预置跳转指令,跳转至翻译代码段中系统调用表的目标表项,从而实现系统调用的正确性。核心翻译模块中的翻译指的是将内部结构IR1指令翻译为内部结构IR2存储。其中,内部结构(Intermediate Representation,IR)可以是中间表示或者中间代码。内部结构IR1为客户程序指令集中间表示,内部结构IR2是宿主程序指令集中间表示。
当然,本发明实施例的二进制翻译器还可以包括源程序分析模块、反汇编模块、目标平台汇编模块、以及目标文件生成模块。
其中,源程序分析模块,用于分析客户平台的源程序,主要对源程序中的各个段进行映射,统一纳入二进制翻译器对应数据结构管理,为后续模块提供基本的信息,保障各个模块的正确执行。反汇编模块,用于对源程序的代码段进行反汇编处理,将源代码转化为内部的IR1数据结构。目标平台汇编模块,用于将翻译出的IR2结构进行汇编,生成真正的汇编指令编码,并存储在映射的内存地址中。目标文件生成模块,用于将内存中的各个段重新按照可执行文件的格式写入目标文件,完成翻译,得到目标程序。
参照图4,示出了本发明实施例的一种二进制翻译器的结构示意图。如图4所示,以客户平台为x86平台,宿主平台为LoongArch平台为例,该二进制翻译器包括源程序分析模块、环境初始化模块、反汇编模块、核心翻译模块、目标平台汇编模块、以及目标文件生成模块。其中,IR1翻译器也即核心翻译模块。
综上,本发明实施例提供了一种二进制翻译方法,该二进制翻译方法是一种基于插桩式的静态二进制翻译方法。本发明实施例在翻译到第一类指令时,在目标代码中的当前地址处直接进行一对一翻译。在翻译到第二类指令时,在目标代码中的当前地址处设置预置跳转指令,该预置跳转指令用于跳转至目标地址,该目标地址为预置的翻译代码段中将所述第二类指令翻译为宿主平台的第二目标指令的代码段入口地址。由此,在翻译到第二类指令(如一对多翻译的指令)时,也可以实现在当前地址处进行一对一翻译,只是此时的一对一翻译实际上是将第二类指令翻译为预置跳转指令,通过预置跳转指令跳转至真正的翻译后的目标指令。所述第一类指令包括一对一指令;所述第二类指令包括一对多指令;其中,一条一对一指令被翻译为一条第一目标指令;一条一对多指令被翻译为两条以上第二目标指令。通过本发明实施例的二进制翻译方法,可以使得源代码中的每条指令在源代码中的偏移位置,与翻译后的目标代码中的每条对应的目标指令在目标代码中的偏移位置相同,从而可以沿用源程序中的跳转关系,实现在偏移地址不变的前提下,保证指令的静态翻译的正确性。由此,本发明实施例提供的二进制翻译方法具有静态翻译的优点,并且解决了指令膨胀导致跳转地址发生改变的问题,可以保证静态二进制翻译中指令跳转的正确性,使得一次翻译得到的目标程序可以被多次使用,并且目标程序的运行不依赖于翻译器,具有较低的运行成本。
需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明实施例所必须的。
参照图5,示出了本发明的一种二进制翻译器中的核心翻译模块的结构框图,所述二进制翻译器用于将源代码翻译为目标代码,所述源代码为客户平台的二进制代码,所述目标代码为宿主平台的二进制代码,所述二进制翻译器包括核心翻译模块500,所述核心翻译模块500包括:
第一翻译单元501,用于在翻译到所述源代码中的第一类指令时,在所述目标代码中的当前地址处将所述第一类指令翻译为宿主平台的第一目标指令;
第二翻译单元502,用于在翻译到所述源代码中的第二类指令时,在预置的翻译代码段中将所述第二类指令翻译为宿主平台的第二目标指令,并且在所述目标代码中的当前地址处设置预置跳转指令,所述预置跳转指令用于跳转至所述翻译代码段中的所述第二目标指令的代码段入口地址;
所述第一类指令包括一对一指令;所述第二类指令包括一对多指令;其中,一条一对一指令被翻译为一条第一目标指令;一条一对多指令被翻译为两条以上第二目标指令。
可选地,所述第二类指令还包括系统调用指令,所述二进制翻译器还包括:
环境初始化模块,用于在所述二进制翻译器的初始化阶段,在所述预置的翻译代码段中的预留位置构建系统调用表;所述系统调用表中包括至少一个表项,每个表项包括一条客户平台的系统调用指令对应宿主平台的系统调用指令的代码段,每个表项还包括对应客户平台的系统调用指令的系统调用号。
可选地,所述第二翻译单元,包括:
指令解析子单元,用于在翻译到所述源代码中的第二类指令,且所述第二类指令为系统调用指令时,从所述第二类指令中获取系统调用号;
地址获取子单元,用于在所述系统调用表中查询从所述第二类指令中获取的系统调用号,确定相匹配的目标表项;
地址设置子单元,用于将所述预置跳转指令的目标地址设置为所述目标表项的地址,并在所述目标代码中的当前地址处设置该预置跳转指令。
可选地,所述二进制翻译器还包括:
环境初始化模块,用于在所述二进制翻译器的初始化阶段,分配目标代码所需的存储空间,并在所述目标代码的存储空间中预留翻译代码段的存储空间。
可选地,所述预置跳转指令为B跳转指令。
可选地,二进制翻译器还可以包括环境初始化模块,用于在初始化阶段配置翻译代码段,以及在翻译代码段中初始化系统调用表,为后续正确翻译打下基础。
可选地,所述二进制翻译器还可以包括源程序分析模块、反汇编模块、目标平台汇编模块、以及目标文件生成模块。
其中,源程序分析模块,用于分析客户平台的源程序,主要对源程序中的各个段进行映射,统一纳入二进制翻译器对应数据结构管理,为后续模块提供基本的信息,保障各个模块的正确执行。反汇编模块,用于对源程序的代码段进行反汇编处理,将源代码转化为内部的IR1数据结构。目标平台汇编模块,用于将翻译出的IR2结构进行汇编,生成真正的汇编指令编码,并存储在映射的内存地址中。目标文件生成模块,用于将内存中的各个段重新按照可执行文件的格式写入目标文件,完成翻译,得到目标程序。
本发明实施例提供了一种二进制翻译器,该二进制翻译器可应用于处理器,该二进制翻译器可应用于执行一种二进制翻译方法,该二进制翻译方法是一种基于插桩式的静态二进制翻译方法。在翻译到第一类指令时,在目标代码中的当前地址处直接进行一对一翻译。在翻译到第二类指令时,在目标代码中的当前地址处设置预置跳转指令,该预置跳转指令用于跳转至目标地址,该目标地址为预置的翻译代码段中将所述第二类指令翻译为宿主平台的第二目标指令的代码段入口地址。由此,在翻译到第二类指令(如一对多翻译的指令)时,也可以实现在当前地址处进行一对一翻译,只是此时的一对一翻译实际上是将第二类指令翻译为预置跳转指令,通过预置跳转指令跳转至真正的翻译后的目标指令。所述第一类指令包括一对一指令;所述第二类指令包括一对多指令;其中,一条一对一指令被翻译为一条第一目标指令;一条一对多指令被翻译为两条以上第二目标指令。通过本发明实施例的二进制翻译方法,可以使得源代码中的每条指令在源代码中的偏移位置,与翻译后的目标代码中的每条对应的目标指令在目标代码中的偏移位置相同,从而可以沿用源程序中的跳转关系,实现在偏移地址不变的前提下,保证指令的静态翻译的正确性。由此,本发明实施例提供的二进制翻译方法具有静态翻译的优点,并且解决了指令膨胀导致跳转地址发生改变的问题,可以保证静态二进制翻译中指令跳转的正确性,使得一次翻译得到的目标程序可以被多次使用,并且目标程序的运行不依赖于翻译器,具有较低的运行成本。
需要说明的是,所述二进制翻译器可应用于处理器,所述处理器可以为单发射处理器或者多发射处理器。单发射处理器是指在一个时钟周期内只从存储器中取出一条指令,并且只对一条指令进行解码,只执行一条指令,只写一个运算结果。多发射处理器是指在一个时钟周期内可以同时从存储器中取出多条指令,同时对多条指令进行解码。
需要说明的是,本发明实施例对处理器的类型和实现方式不做限定,例如,处理器可以为微处理器、芯片等。
对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
本发明实施例提供了一种用于二进制翻译的电子设备,所述电子设备包括二进制翻译器,所述二进制翻译器用于将源代码翻译为目标代码,所述源代码为客户平台的二进制代码,所述目标代码为宿主平台的二进制代码,所述电子设备包括有存储器,以及一个或者一个以上的程序,其中一个或者一个以上程序存储于存储器中,且经配置以由一个或者一个以上处理器执行所述一个或者一个以上程序包含用于进行以下操作的指令:在翻译到所述源代码中的第一类指令时,在所述目标代码中的当前地址处将所述第一类指令翻译为宿主平台的第一目标指令;在翻译到所述源代码中的第二类指令时,在预置的翻译代码段中将所述第二类指令翻译为宿主平台的第二目标指令,并且在所述目标代码中的当前地址处插入预置跳转指令,所述预置跳转指令用于跳转至所述翻译代码段中的所述第二目标指令的代码段入口地址。
图6是根据一示例性实施例示出的一种用于二进制翻译的电子设备800的框图。例如,电子设备800可以是移动电话,计算机,数字广播终端,消息收发设备,游戏控制台,平板设备,医疗设备,健身设备,个人数字助理等。
参照图6,电子设备800可以包括以下一个或多个组件:处理组件802,存储器804,电源组件806,多媒体组件808,音频组件810,输入/输出(I/ O)的接口812,传感器组件814,以及通信组件816。
处理组件802通常控制电子设备800的整体操作,诸如与显示,电话呼叫,数据通信,相机操作和记录操作相关联的操作。处理元件802可以包括一个或多个处理器820来执行指令,以完成上述的方法的全部或部分步骤。此外,处理组件802可以包括一个或多个模块,便于处理组件802和其他组件之间的交互。例如,处理组件802可以包括多媒体模块,以方便多媒体组件808和处理组件802之间的交互。
存储器804被配置为存储各种类型的数据以支持在电子设备800的操作。这些数据的示例包括用于在电子设备800上操作的任何应用程序或方法的指令,联系人数据,电话簿数据,消息,图片,视频等。存储器804可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。
电源组件806为电子设备800的各种组件提供电力。电源组件806可以包括电源管理系统,一个或多个电源,及其他与为电子设备800生成、管理和分配电力相关联的组件。
多媒体组件808包括在所述电子设备800和用户之间的提供一个输出接口的屏幕。在一些实施例中,屏幕可以包括液晶显示器(LCD)和触摸面板(TP)。如果屏幕包括触摸面板,屏幕可以被实现为触摸屏,以接收来自用户的输入信号。触摸面板包括一个或多个触摸传感器以感测触摸、滑动和触摸面板上的手势。所述触摸传感器可以不仅感测触摸或滑动动作的边界,而且还检测与所述触摸或滑动操作相关的持续时间和压力。在一些实施例中,多媒体组件808包括一个前置摄像头和/或后置摄像头。当电子设备800处于操作模式,如拍摄模式或视频模式时,前置摄像头和/或后置摄像头可以接收外部的多媒体数据。每个前置摄像头和后置摄像头可以是一个固定的光学透镜系统或具有焦距和光学变焦能力。
音频组件810被配置为输出和/或输入音频信号。例如,音频组件810包括一个麦克风(MIC),当电子设备800处于操作模式,如呼叫模式、记录模式和语音信息处理模式时,麦克风被配置为接收外部音频信号。所接收的音频信号可以被进一步存储在存储器804或经由通信组件816发送。在一些实施例中,音频组件810还包括一个扬声器,用于输出音频信号。
I/ O接口812为处理组件802和外围接口模块之间提供接口,上述外围接口模块可以是键盘,点击轮,按钮等。这些按钮可包括但不限于:主页按钮、音量按钮、启动按钮和锁定按钮。
传感器组件814包括一个或多个传感器,用于为电子设备800提供各个方面的状态评估。例如,传感器组件814可以检测到电子设备800的打开/关闭状态,组件的相对定位,例如所述组件为电子设备800的显示器和小键盘,传感器组件814还可以搜索电子设备800或电子设备800一个组件的位置改变,用户与电子设备800接触的存在或不存在,电子设备800方位或加速/减速和电子设备800的温度变化。传感器组件814可以包括接近传感器,被配置用来在没有任何的物理接触时检测附近物体的存在。传感器组件814还可以包括光传感器,如CMOS或CCD图像传感器,用于在成像应用中使用。在一些实施例中,该传感器组件814还可以包括加速度传感器,陀螺仪传感器,磁传感器,压力传感器或温度传感器。
通信组件816被配置为便于电子设备800和其他设备之间有线或无线方式的通信。电子设备800可以接入基于通信标准的无线网络,如WiFi,2G或3G,或它们的组合。在一个示例性实施例中,通信组件816经由广播信道接收来自外部广播管理系统的广播信号或广播相关信息。在一个示例性实施例中,所述通信组件816还包括近场通信(NFC)模块,以促进短程通信。例如,在NFC模块可基于射频信息处理(RFID)技术,红外数据协会(IrDA)技术,超宽带(UWB)技术,蓝牙(BT)技术和其他技术来实现。
在示例性实施例中,电子设备800可以被一个或多个应用专用集成电路(ASIC)、数字信号处理器(DSP)、数字信号处理设备(DSPD)、可编程逻辑器件(PLD)、现场可编程门阵列(FPGA)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述方法。
在示例性实施例中,还提供了一种包括指令的非临时性计算机可读存储介质,例如包括指令的存储器804,上述指令可由电子设备800的处理器820执行以完成上述方法。例如,所述非临时性计算机可读存储介质可以是ROM、随机存取存储器(RAM)、CD-ROM、磁带、软盘和光数据存储设备等。
在示例性实施例中,电子设备800可以被一个或多个应用专用集成电路(ASIC)、数字信号处理器(DSP)、数字信号处理设备(DSPD)、可编程逻辑器件(PLD)、现场可编程门阵列(FPGA)、控制器、微控制器、处理器或其他电子元件实现,用于执行上述方法。
在示例性实施例中,还提供了一种包括指令的非临时性计算机可读存储介质,例如包括指令的存储器804,上述指令可由电子设备800的处理器820执行以完成上述方法。例如,所述非临时性计算机可读存储介质可以是ROM、随机存取存储器(RAM)、CD-ROM、磁带、软盘和光数据存储设备等。
一种非临时性计算机可读存储介质,当所述存储介质中的指令由电子设备(服务器或者终端)的处理器执行时,使得处理器能够执行图1所示的二进制翻译方法。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
本领域内的技术人员应明白,本发明实施例的实施例可提供为方法、装置、或计算机程序产品。因此,本发明实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明实施例是参照根据本发明实施例的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以预测方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明实施例范围的所有变更和修改。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。
以上对本发明所提供的一种二进制翻译方法、二进制翻译器及电子设备,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
Claims (12)
1.一种二进制翻译方法,其特征在于,应用于二进制翻译器,所述二进制翻译器用于将源代码翻译为目标代码,所述源代码为客户平台的二进制代码,所述目标代码为宿主平台的二进制代码,所述方法包括:
在翻译到所述源代码中的第一类指令时,在所述目标代码中的当前地址处将所述第一类指令翻译为宿主平台的第一目标指令;
在翻译到所述源代码中的第二类指令时,在预置的翻译代码段中将所述第二类指令翻译为宿主平台的第二目标指令,并且在所述目标代码中的当前地址处设置预置跳转指令,所述预置跳转指令用于跳转至所述翻译代码段中的所述第二目标指令的代码段入口地址;
所述第一类指令包括一对一指令;所述第二类指令包括一对多指令;其中,一条一对一指令被翻译为一条第一目标指令;一条一对多指令被翻译为两条以上第二目标指令。
2.根据权利要求1所述的方法,其特征在于,所述第二类指令还包括系统调用指令,所述方法还包括:
在所述二进制翻译器的初始化阶段,在所述预置的翻译代码段中的预留位置构建系统调用表;所述系统调用表中包括至少一个表项,每个表项包括一条客户平台的系统调用指令对应宿主平台的系统调用指令的代码段,每个表项还包括对应客户平台的系统调用指令的系统调用号。
3.根据权利要求2所述的方法,其特征在于,所述在所述目标代码中的当前地址处设置预置跳转指令,包括:
在翻译到所述源代码中的第二类指令,且所述第二类指令为系统调用指令时,从所述第二类指令中获取系统调用号;
在所述系统调用表中查询从所述第二类指令中获取的系统调用号,确定相匹配的目标表项;
将所述预置跳转指令的目标地址设置为所述目标表项的地址,并在所述目标代码中的当前地址处设置该预置跳转指令。
4.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在所述二进制翻译器的初始化阶段,分配目标代码所需的存储空间,并在所述目标代码的存储空间中预留翻译代码段的存储空间。
5.根据权利要求1至4任一所述的方法,其特征在于,所述预置跳转指令为B跳转指令。
6.一种二进制翻译器,其特征在于,所述二进制翻译器用于将源代码翻译为目标代码,所述源代码为客户平台的二进制代码,所述目标代码为宿主平台的二进制代码,所述二进制翻译器包括核心翻译模块,所述核心翻译模块包括:
第一翻译单元,用于在翻译到所述源代码中的第一类指令时,在所述目标代码中的当前地址处将所述第一类指令翻译为宿主平台的第一目标指令;
第二翻译单元,用于在翻译到所述源代码中的第二类指令时,在预置的翻译代码段中将所述第二类指令翻译为宿主平台的第二目标指令,并且在所述目标代码中的当前地址处设置预置跳转指令,所述预置跳转指令用于跳转至所述翻译代码段中的所述第二目标指令的代码段入口地址;
所述第一类指令包括一对一指令;所述第二类指令包括一对多指令;其中,一条一对一指令被翻译为一条第一目标指令;一条一对多指令被翻译为两条以上第二目标指令。
7.根据权利要求6所述的二进制翻译器,其特征在于,所述第二类指令还包括系统调用指令,所述二进制翻译器还包括:
环境初始化模块,用于在所述二进制翻译器的初始化阶段,在所述预置的翻译代码段中的预留位置构建系统调用表;所述系统调用表中包括至少一个表项,每个表项包括一条客户平台的系统调用指令对应宿主平台的系统调用指令的代码段,每个表项还包括对应客户平台的系统调用指令的系统调用号。
8.根据权利要求7所述的二进制翻译器,其特征在于,所述第二翻译单元,包括:
指令解析子单元,用于在翻译到所述源代码中的第二类指令,且所述第二类指令为系统调用指令时,从所述第二类指令中获取系统调用号;
地址获取子单元,用于在所述系统调用表中查询从所述第二类指令中获取的系统调用号,确定相匹配的目标表项;
地址设置子单元,用于将所述预置跳转指令的目标地址设置为所述目标表项的地址,并在所述目标代码中的当前地址处设置该预置跳转指令。
9.根据权利要求6所述的二进制翻译器,其特征在于,所述二进制翻译器还包括:
环境初始化模块,用于在所述二进制翻译器的初始化阶段,分配目标代码所需的存储空间,并在所述目标代码的存储空间中预留翻译代码段的存储空间。
10.根据权利要求6至9任一所述的二进制翻译器,其特征在于,所述预置跳转指令为B跳转指令。
11.一种电子设备,其特征在于,所述电子设备包括:
处理器;以及
存储器,存储有一个或者一个以上的程序,所述程序被执行时,使得所述处理器执行如权利要求1至5中任一项所述的二进制翻译方法。
12.一种可读存储介质,其特征在于,当所述存储介质中的指令由电子设备的处理器执行时,使得所述处理器能够执行如权利要求1至5中任一项所述的二进制翻译方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310407639.0A CN116126350B (zh) | 2023-04-17 | 2023-04-17 | 一种二进制翻译方法、二进制翻译器及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310407639.0A CN116126350B (zh) | 2023-04-17 | 2023-04-17 | 一种二进制翻译方法、二进制翻译器及电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116126350A true CN116126350A (zh) | 2023-05-16 |
CN116126350B CN116126350B (zh) | 2023-09-12 |
Family
ID=86294194
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310407639.0A Active CN116126350B (zh) | 2023-04-17 | 2023-04-17 | 一种二进制翻译方法、二进制翻译器及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116126350B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116501387A (zh) * | 2023-06-16 | 2023-07-28 | 龙芯中科技术股份有限公司 | 一种指令跳转方法、装置、电子设备及可读存储介质 |
CN116820568A (zh) * | 2023-06-09 | 2023-09-29 | 北京市合芯数字科技有限公司 | 指令翻译方法及装置、存储介质和终端 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1716202A (zh) * | 2004-06-30 | 2006-01-04 | 中国科学院计算技术研究所 | 动静结合二进制翻译中静态信息不完备的处理方法及装置 |
CN1900910A (zh) * | 2005-07-22 | 2007-01-24 | 中国科学院计算技术研究所 | 二进制翻译中经由跳转表的多目标分支语句的识别方法 |
CN114115990A (zh) * | 2021-12-02 | 2022-03-01 | 华东师范大学 | 动静结合二进制翻译的程序迁移方法、系统及存储介质 |
CN114610324A (zh) * | 2022-02-28 | 2022-06-10 | 龙芯中科技术股份有限公司 | 一种二进制翻译方法、处理器及电子设备 |
CN114610387A (zh) * | 2022-02-28 | 2022-06-10 | 龙芯中科技术股份有限公司 | 一种分支预测方法、处理器及电子设备 |
-
2023
- 2023-04-17 CN CN202310407639.0A patent/CN116126350B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1716202A (zh) * | 2004-06-30 | 2006-01-04 | 中国科学院计算技术研究所 | 动静结合二进制翻译中静态信息不完备的处理方法及装置 |
CN1900910A (zh) * | 2005-07-22 | 2007-01-24 | 中国科学院计算技术研究所 | 二进制翻译中经由跳转表的多目标分支语句的识别方法 |
CN114115990A (zh) * | 2021-12-02 | 2022-03-01 | 华东师范大学 | 动静结合二进制翻译的程序迁移方法、系统及存储介质 |
CN114610324A (zh) * | 2022-02-28 | 2022-06-10 | 龙芯中科技术股份有限公司 | 一种二进制翻译方法、处理器及电子设备 |
CN114610387A (zh) * | 2022-02-28 | 2022-06-10 | 龙芯中科技术股份有限公司 | 一种分支预测方法、处理器及电子设备 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116820568A (zh) * | 2023-06-09 | 2023-09-29 | 北京市合芯数字科技有限公司 | 指令翻译方法及装置、存储介质和终端 |
CN116820568B (zh) * | 2023-06-09 | 2024-01-05 | 北京市合芯数字科技有限公司 | 指令翻译方法及装置、存储介质和终端 |
CN116501387A (zh) * | 2023-06-16 | 2023-07-28 | 龙芯中科技术股份有限公司 | 一种指令跳转方法、装置、电子设备及可读存储介质 |
CN116501387B (zh) * | 2023-06-16 | 2023-09-12 | 龙芯中科技术股份有限公司 | 一种指令跳转方法、装置、电子设备及可读存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN116126350B (zh) | 2023-09-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN116126350B (zh) | 一种二进制翻译方法、二进制翻译器及电子设备 | |
US10705780B2 (en) | Method, device, and storage medium for displaying application page | |
US11210119B2 (en) | Method and device for displaying interface, electronic equipment, server, and storage medium | |
CN113342697B (zh) | 闪存转换层仿真测试系统及方法 | |
CN109947671B (zh) | 一种地址转换方法、装置、电子设备及储存介质 | |
CN111966410B (zh) | 启动处理方法、装置、电子设备及存储介质 | |
CN107608714B (zh) | 字节对齐方法、装置及计算机可读存储介质 | |
CN114610387A (zh) | 一种分支预测方法、处理器及电子设备 | |
CN111767058A (zh) | 程序编译方法及装置、电子设备和存储介质 | |
CN111061452A (zh) | 用户界面的语音控制方法和装置 | |
CN109725943A (zh) | 一种程序跳转方法、装置、电子设备及存储介质 | |
CN105468606B (zh) | 网页保存的方法及装置 | |
CN111324214B (zh) | 一种语句纠错方法和装置 | |
CN109522286B (zh) | 文件系统的处理方法和装置 | |
CN104951337B (zh) | 文件增量更新方法及装置 | |
CN112256445B (zh) | 基于应用程序的数据处理方法、装置、设备及存储介质 | |
CN110874259A (zh) | 程序执行方法、装置、设备和存储介质 | |
CN113420531B (zh) | 一种代码文本的转换方法、装置及存储介质 | |
CN114610324A (zh) | 一种二进制翻译方法、处理器及电子设备 | |
CN114385335A (zh) | 中断资源的使用方法、装置、设备及存储介质 | |
CN112732734A (zh) | 一种信息处理方法及装置 | |
CN115098200B (zh) | 语言切换方法、装置、电子设备及存储介质 | |
CN111273910B (zh) | 获取资源号码标识符的方法、装置及存储介质 | |
CN115129325B (zh) | 一种数据处理方法、装置、电子设备及存储介质 | |
CN111880696B (zh) | 一种基于百科的数据处理方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |