CN103235724A - 基于原子操作语义描述的多源二进制代码一体化翻译方法 - Google Patents
基于原子操作语义描述的多源二进制代码一体化翻译方法 Download PDFInfo
- Publication number
- CN103235724A CN103235724A CN2013101726302A CN201310172630A CN103235724A CN 103235724 A CN103235724 A CN 103235724A CN 2013101726302 A CN2013101726302 A CN 2013101726302A CN 201310172630 A CN201310172630 A CN 201310172630A CN 103235724 A CN103235724 A CN 103235724A
- Authority
- CN
- China
- Prior art keywords
- instruction
- semantic
- node
- data transfer
- expression formula
- 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.)
- Pending
Links
Images
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
本发明涉及一种基于原子操作语义描述的多源二进制代码一体化翻译方法,具体含有如下步骤:步骤1:将源平台的机器指令进行反汇编后得到汇编指令,设计原子操作描述语言,对构成指令的指令原子操作及原子寻址方式分别进行描述,组成刻画指令语义的表达式序列,实现对不同处理器指令集的统一描述;步骤2:为简单后续翻译,将不方便处理的表达式序列映射为三叉语义树;步骤3:采用分层迭代的指令语义等价转换算法,在三叉语义树上通过自顶向下的策略进行分层翻译,然后,利用本地编译器产生目标平台的机器指令;本发明了提供一种可扩展、应用范围广、效率高的基于原子操作语义描述的多源二进制代码一体化翻译方法。
Description
(一)、技术领域:本发明涉及一种二进制代码翻译方法,特别是涉及一种基于原子操作语义描述的多源二进制代码一体化翻译方法。
(二)、背景技术:二进制翻译是将一种源平台的指令翻译到另一种源平台运行,二进制翻译常用于软件的移植,而实现优秀软件的无缝移植,是软件研发的一个重要方向。通常,不同的处理器平台的体系结构及指令集间存在着一定的差异,二进制翻译需要消除这些差异来实现处理器对不同指令集的支持。
二进制翻译技术发展到现在,已经有一些成熟的产品出现,包括UQBT、bintrans、国内中科院开发的DigitalBridge、上海交大开发的CrossBit以及近几年受到广泛关注的QEMU等等,按照翻译方式我们将这些技术分为静态翻译和动态翻译,UQBT采用静态翻译的方式,将可执行文件的二进制码反编译到低级C级别,然后在目标平台上编译运行,它的优点在于后端输出低级C,可移植性好,但是近年来反编译技术的缺陷使其停滞不前,导致它的可用性不高;bintrans、CrossBit、QEMU采用动态翻译方式,DigitalBridge采用动静结合的方式,以基本块或单条指令为基本单位,翻译方式类似于模拟,效率普遍较低。
上述产品中,除DigitalBridge外,均针对多种源平台之间的翻译进行了一定的研究,采用的方法不尽相同,以QEMU0.9.1为例,针对不同的源处理器平台,需要构建特殊的中间表示,以处理该处理器独有的指令,这样不利于扩充新的处理器平台。UQBT将不同处理器的机器指令反编译到相同的低级C语言,C语言的通用性可以较好的适应不同的平台,但是反编辑技术在数据类型恢复、高级结构构造等方面存在较大的困难,这也是它得不到广泛应用的原因。因此,设计一种统一的中间表示,能够方便实现不同处理器的统一翻译,成为二进制翻译工作的一项新的挑战。
(三)、发明内容:
本发明要解决的技术问题是:克服现有技术的缺陷,提供一种可扩展、应用范围广、效率高的基于原子操作语义描述的多源二进制代码一体化翻译方法。
本发明的技术方案:
一种基于原子操作语义描述的多源二进制代码一体化翻译方法,具体含有下列步骤:
步骤1:将源平台的机器指令进行反汇编后得到汇编指令,设计原子操作描述语言(AODL),对构成指令的指令原子操作及原子寻址方式分别进行描述,组成刻画指令语义的表达式序列,实现对不同处理器指令集的统一描述;
步骤2:为简单后续翻译,将不方便处理的表达式序列映射为三叉语义树;
步骤3:采用分层迭代的指令语义等价转换算法,在三叉语义树上通过自顶向下的策略进行分层翻译,然后,利用本地编译器产生目标平台的机器指令。
步骤1中:不同处理器的指令集存在着很大的区别,包括指令的功能、构成和编码等多个方面。二进制翻译需要进行不同指令集之间的转换,因此,指令集之间的差异对二进制翻译造成了极大的困难。然而,不论是精简指令集或复杂指令集,构成指令的基本操作确实基本相同的,如数据传送、移位等操作。因此,通过设计一种语义描述语言,将构成指令的基本操作描述出来,从而可以将不同的指令集描述为相同的中间层,简化指令集之间的翻译过程。原子操作描述语言(AODL)通过对构成指令的两个基本要素分别进行描述,组成刻画指令语义的表达式序列,实现对指令的语义等价变换,该两个基本要素为:指令原子操作和原子寻址方式。
步骤1中:指令原子操作分为数据传送操作DTO(Data Transfer Operation)和非数据传送操作NDTO(Non-Data Transfer Operation)两类,数据传送操作指的是不同数据单元间发生传递内容的操作,数据传送操作含有寄存器间数据移动、寄存器与内存数据单元间数据移动、内存数据单元之间的数据移动、跳转、调用和返回,之所以将跳转、调用和返回这三类控制操作归为数据传送操作,是因为它们引起了目标存储空间内容的改变,如跳转和返回操作通常引起pc寄存器的改变,调用操作会引起堆栈空间和pc寄存器的改变;非数据传送操作指的是算术运算操作、逻辑运算操作、移位操作,算术运算操作又细分为:有符号数运算操作、无符号数运算操作、浮点运算操作和整型运算操作,这些操作虽然看似改变了存储空间内数据单元的内容,实际上是依赖数据传送类操作来实现的。
原子寻址方式含有存储器寻址、寄存器寻址和立即寻址,分别以M[x]、R[x]、I[x]来表示,对应指令中操作数位数的不同,原子寻址方式配合字节长度标识来描述出指令操作数的字节长度,目前的处理器所支持的基本数据单元只有内存、寄存器、立即数三类。
原子操作和原子寻址方式的组合形成表达式,表达式序列构成与指令相同的语义,从而实现指令的等价语义变换。表达式是二进制翻译的基本单位,承载着指令的基本动作信息,它们可简单可复杂,因为原子操作与原子寻址方式可以以多种方式组合。
步骤2中:由于在实施翻译的过程中,表达式序列不利于形式化的分析,因此,将表达式序列映射为三叉语义树,以灵活的层次化的结构来简化后续的翻译过程,表达式序列映射为三叉语义树的过程含有以下步骤:
步骤2.1:将表达式序列中的数据传送操作映射为三叉语义树的根结点,在三叉语义树中只有根结点被映射为数据传送操作,因为它对应的表达式只能进行一个数据传送动作;
在数据传送操作中,跳转(opJmp)、调用(opCall)和返回(opRet)对应的根结点含有两个子结点,该两个子结点为条件子结点(iTree)和目标子结点(dTree);除了跳转、调用和返回以外其它的数据传送操作对应的根结点含有三个子结点,该三个子结点从左至右分别为:条件子结点、源子结点(sTree)、目标子结点;
步骤2.2:将表达式序列中的非数据传送操作映射为三叉语义树中除根结点外的非叶子结点;
步骤2.3:将表达式序列中的基本寻址方式代表的数据单元映射为三叉语义树的叶子结点,该基本寻址方式代表的数据单元不能再分解为更小的数据单元;
经过上述指令语义映射后,每条表达式都转换为一棵三叉语义树,进而每条指令表示成一组三叉语义树的组合,相当于将指令执行分解成了一组单步动作,而每棵三叉语义树则显式地表示出一个单步指令动作的执行效果,从而明确的表示出了执行状态的转换。三叉语义树的根结点由数据传送操作映射而来,称之为DTO(数据传输对象)层结点;叶子结点由基本寻址方式构成,由于基本寻址方式只能用于构成其它复杂表达式而无法再分解成更小的表达式,称之为最简型表达式,最简型表达式构成的结点为End层(终止层)结点。除了根结点和叶子结点外,其它内部结点则均为NDTO(非数据传输对象)型操作,称之为NDTO层结点。
步骤2.1中:数据传送操作含有赋值opAss、跳转opJmp、调用opCall和返回opRet;条件子结点是为条件执行指令设计的,当原子操作中没有涉及到特定的执行条件时,条件子结点为空;
步骤2.2中:表达式序列中的非数据传送操作含有加操作(opPlus)、减操作(opMinus)。
步骤3中:将三叉语义树的根结点、除根结点外的非叶子结点、叶子结点分别归类到DTO层、NDTO层、End层上,采用自顶向下分析、由下至上生成的转换方法,实现表达式到目标平台指令的翻译,并且,在同一层次上采取相似的处理方法。
DTO层的主要工作是判断指令原子操作的操作类型,根据指令原子操作是否会使控制流发生改变,分别选择不同的处理方法;
对不涉及控制流改变的指令原子操作,每一个指令原子操作均可以表示为“(ExpressionA=>)Location:=ExpressionB”的形式,在三叉语义树中,ExpressionA对应于条件子结点(可为空),Location对应于目标子结点,ExpressionB对应于源子结点;
对跳转类(opJmp),每一个跳转类原子操作均可以表示为“(ExpressionA=>)->ExpressionB”的形式。ExpressionA对应于语义树中的条件子树,ExpressionB对应于语义树中的目标子树。在转换过程中,如果条件子树为空则生成无条件跳转指令,否则,生成条件跳转指令。
直接分支可以在翻译阶段直接建立跳转指令与跳转目标的关系。间接跳转则需要利用不同的方法实现跳转表的恢复,然后利用目标平台的指令序列模拟多分支跳转;
对函数调用类(opCall)和函数返回类(opRet),此两类原子操作均与函数相关,由于函数的机器代码在不同的处理器平台上有着特定的约定形式,为了保证各函数间的正确调用,在对这些动作翻译时,必须遵循相应的调用约定。最后,为每种不同的数据传送操作选择目标平台上功能等价的指令操作符与之对应。
NDTO层的任务在于根据非数据传送操作不同的操作类型及寻址方式,生成具体的指令操作符及操作数,以模拟所映射表达式的语义;若结点包含非叶子子结点,即包含非空子树,则需对每一棵树再进行NDTO处理,之后再转至End层进行寄存器和存储单元分配;
End层的主要工作就是根据原子寻址方式生成具体的数据存储单元或常量,作为操作数以构成目标平台上的指令,这其中包括根据源平台寄存器编号映射其在目标平台中对应的寄存器,为源平台上存储器地址映射其在目标平台中的存储位置,以及为某些常量生成具体的数值。
本发明的有益效果:
1、本发明通过获取指令的原子操作、基本数据单元和寻址方式,对不同指令集中的指令均进行描述,避免了针对不同处理器指令集再开发不同的翻译前端,能够以一个统一的中间层接收不同的指令集,方便灵活、利于扩展,实现了不同指令的统一描述。
2、本发明将不方便处理的表达式序列映射为三叉语义树,三叉语义树以EBNF的语法来表示,严谨规范,易于简化分析及翻译流程,提升了指令翻译的效率。
3、本发明采用分层迭代的指令语义等价转换算法,简化了翻译过程中的查错纠错,根据指令操作特点将其归类到不同层次,操作转换只在其所在层内进行,并可迭代调用本层及其它层的处理算法,处理过程清晰简明,同时也会简化转换过程中的查错和纠错,将来扩展对新指令集的支持时也会相对简单。
(四)、附图说明:
图1为基于原子操作语义描述的多源二进制代码一体化翻译方法的流程示意图;
图2为原子操作描述语言(AODL)的定义示意图;
图3为表达式对应的语义树示意图;
图4为原子语义分层迭代翻译流程示意图。
(五)、具体实施方式:
基于原子操作语义描述的多源二进制代码一体化翻译方法含有下列步骤:
步骤1:将源平台的机器指令进行反汇编后得到汇编指令,设计原子操作描述语言(AODL),对构成指令的指令原子操作及原子寻址方式分别进行描述,组成刻画指令语义的表达式序列,实现对不同处理器指令集的统一描述;
步骤2:为简单后续翻译,将不方便处理的表达式序列映射为三叉语义树;
步骤3:采用分层迭代的指令语义等价转换算法,在三叉语义树上通过自顶向下的策略进行分层翻译,然后,利用本地编译器产生目标平台的机器指令。
步骤1中:不同处理器的指令集存在着很大的区别,包括指令的功能、构成和编码等多个方面。二进制翻译需要进行不同指令集之间的转换,因此,指令集之间的差异对二进制翻译造成了极大的困难。然而,不论是精简指令集或复杂指令集,构成指令的基本操作确实基本相同的,如数据传送、移位等操作。因此,通过设计一种语义描述语言,将构成指令的基本操作描述出来,从而可以将不同的指令集描述为相同的中间层,简化指令集之间的翻译过程。原子操作描述语言(AODL)通过对构成指令的两个基本要素分别进行描述,组成刻画指令语义的表达式序列,实现对指令的语义等价变换,该两个基本要素为:指令原子操作和原子寻址方式。
步骤1中:指令原子操作分为数据传送操作DTO(Data Transfer Operation)和非数据传送操作NDTO(Non-Data Transfer Operation)两类,数据传送操作指的是不同数据单元间发生传递内容的操作,数据传送操作含有寄存器间数据移动、寄存器与内存数据单元间数据移动、内存数据单元之间的数据移动、跳转、调用和返回,之所以将跳转、调用和返回这三类控制操作归为数据传送操作,是因为它们引起了目标存储空间内容的改变,如跳转和返回操作通常引起pc寄存器的改变,调用操作会引起堆栈空间和pc寄存器的改变;非数据传送操作指的是算术运算操作、逻辑运算操作、移位操作,算术运算操作又细分为:有符号数运算操作、无符号数运算操作、浮点运算操作和整型运算操作,这些操作虽然看似改变了存储空间内数据单元的内容,实际上是依赖数据传送类操作来实现的。
原子寻址方式含有存储器寻址、寄存器寻址和立即寻址,分别以M[x]、R[x]、I[x]来表示,对应指令中操作数位数的不同,原子寻址方式配合字节长度标识来描述出指令操作数的字节长度,目前的处理器所支持的基本数据单元只有内存、寄存器、立即数三类。
原子操作和原子寻址方式的组合形成表达式,表达式序列构成与指令相同的语义,从而实现指令的等价语义变换。表达式是二进制翻译的基本单位,承载着指令的基本动作信息,它们可简单可复杂,因为原子操作与原子寻址方式可以以多种方式组合。
步骤2中:由于在实施翻译的过程中,表达式序列不利于形式化的分析,因此,将表达式序列映射为三叉语义树,以灵活的层次化的结构来简化后续的翻译过程,表达式序列映射为三叉语义树的过程含有以下步骤:
步骤2.1:将表达式序列中的数据传送操作映射为三叉语义树的根结点,在三叉语义树中只有根结点被映射为数据传送操作,因为它对应的表达式只能进行一个数据传送动作;
在数据传送操作中,跳转(opJmp)、调用(opCall)和返回(opRet)对应的根结点含有两个子结点,该两个子结点为条件子结点(iTree)和目标子结点(dTree);除了跳转、调用和返回以外其它的数据传送操作对应的根结点含有三个子结点,该三个子结点从左至右分别为:条件子结点、源子结点(sTree)、目标子结点;
步骤2.2:将表达式序列中的非数据传送操作映射为三叉语义树中除根结点外的非叶子结点;
步骤2.3:将表达式序列中的基本寻址方式代表的数据单元映射为三叉语义树的叶子结点,该基本寻址方式代表的数据单元不能再分解为更小的数据单元;
经过上述指令语义映射后,每条表达式都转换为一棵三叉语义树,进而每条指令表示成一组三叉语义树的组合,相当于将指令执行分解成了一组单步动作,而每棵三叉语义树则显式地表示出一个单步指令动作的执行效果,从而明确的表示出了执行状态的转换。三叉语义树的根结点由数据传送操作映射而来,称之为DTO(数据传输对象)层结点;叶子结点由基本寻址方式构成,由于基本寻址方式只能用于构成其它复杂表达式而无法再分解成更小的表达式,称之为最简型表达式,最简型表达式构成的结点为End层(终止层)结点。除了根结点和叶子结点外,其它内部结点则均为NDTO(非数据传输对象)型操作,称之为NDTO层结点。
步骤2.1中:数据传送操作含有赋值opAss、跳转opJmp、调用opCall和返回opRet;条件子结点是为条件执行指令设计的,当原子操作中没有涉及到特定的执行条件时,条件子结点为空;
步骤2.2中:表达式序列中的非数据传送操作含有加操作(opPlus)、减操作(opMinus)。
步骤3中:将三叉语义树的根结点、除根结点外的非叶子结点、叶子结点分别归类到DTO层、NDTO层、End层上,采用自顶向下分析、由下至上生成的转换方法,实现表达式到目标平台指令的翻译,并且,在同一层次上采取相似的处理方法。
DTO层的主要工作是判断指令原子操作的操作类型,根据指令原子操作是否会使控制流发生改变,分别选择不同的处理方法;
对不涉及控制流改变的指令原子操作,每一个指令原子操作均可以表示为“(ExpressionA=>)Location:=ExpressionB”的形式,在三叉语义树中,ExpressionA对应于条件子结点(可为空),Location对应于目标子结点,ExpressionB对应于源子结点;
对跳转类(opJmp),每一个跳转类原子操作均可以表示为“(ExpressionA=>)->ExpressionB”的形式。ExpressionA对应于语义树中的条件子树,ExpressionB对应于语义树中的目标子树。在转换过程中,如果条件子树为空则生成无条件跳转指令,否则,生成条件跳转指令。
直接分支可以在翻译阶段直接建立跳转指令与跳转目标的关系。间接跳转则需要利用不同的方法实现跳转表的恢复,然后利用目标平台的指令序列模拟多分支跳转;
对函数调用类(opCall)和函数返回类(opRet),此两类原子操作均与函数相关,由于函数的机器代码在不同的处理器平台上有着特定的约定形式,为了保证各函数间的正确调用,在对这些动作翻译时,必须遵循相应的调用约定。最后,为每种不同的数据传送操作选择目标平台上功能等价的指令操作符与之对应。
NDTO层的任务在于根据非数据传送操作不同的操作类型及寻址方式,生成具体的指令操作符及操作数,以模拟所映射表达式的语义;若结点包含非叶子子结点,即包含非空子树,则需对每一棵树再进行NDTO处理,之后再转至End层进行寄存器和存储单元分配;
End层的主要工作就是根据原子寻址方式生成具体的数据存储单元或常量,作为操作数以构成目标平台上的指令,这其中包括根据源平台寄存器编号映射其在目标平台中对应的寄存器,为源平台上存储器地址映射其在目标平台中的存储位置,以及为某些常量生成具体的数值。
下面进一步详细说明基于原子操作语义描述的多源二进制代码一体化翻译方法(参见图1~图4),基于原子操作语义描述的多源二进制代码一体化翻译方法具体分三个阶段:采用原子操作描述语言对源平台指令进行描述阶段A、三叉语义树映射阶段B、分层迭代的原子语义变换阶段C。
源平台指令进行描述阶段A:
该阶段完成的工作主要是利用原子操作描述语言对源平台指令进行描述,涉及的模块包括图1中的模块101和模块102;模块101对ELF可执行文件进行分析并解码,获得汇编指令;模块102利用原子操作描述语言对得到的指令进行描述,形成表达式。
原子操作描述语言AODL的定义可见图2。AODL的符号库为:
数据传送类原子操作符号:
跳转类原子操作opJmp
调用类原子操作opCall
返回类原子操作opRet
数据传送类原子操作中除opJmp、opCall、opRet外的其它原子操作opAssign
非数据传送类原子操作符号:
条件比较类原子操作opCmp
一元操作opUnary,如取反等只需要一个操作树的原子操作
二元操作opBin,如或、与、异或等需要两个操作树的原子操作
原子寻址方式m[x],r[x],i[x]分别表示内存、寄存器和立即数寻址
立即数寻址涉及的常量符号:
十进制非0常量符号Dez::='1'|'2'|'3'|'4'|'5'|'6'|'7'|'8'|'9'
十进制常量符号D::='0'|Dez
十六进制常量符号Dh='A'|'B'|'C'|'D'|'E'|'F'
常量整型数字符号N::=(-)[DezD]+|'0x'[DhD]+|(-)'2**'[D]+
常量浮点符号F::=(-)[D]+.[D]+
原子寻址方式组合成基本数据单元O::='m['N']'|'r['N']'|'i['N']'|'i['F']'
表达式符号E::=E opBin E|opUnary E|C'?'E':'E|'m['E']'|'r['E']'|'i['E']'|O,它由子表达式、非数据传送操作、基本数据单元和复杂数据单元组合而成。
有了以上的符号库,对指令的instr的形式化描述就可以表示为instr::=DTO*,其中数据传送类操作DTO::=C'=>'DTO|E opAssign E|opJmp E|opCall E|opRet
三叉语义树映射阶段B:
该阶段完成语义表达式到三叉语义树的映射,主要涉及图1中的模块103。模块103通过将数据传送操作映射为根节点、原子寻址方式映射为叶子结点、非数据传送操作映射为其它结点的方式产生三叉语义树,三叉语义树方便操作,易于后续翻译工作的开展。图3是一个数据传送操作对应的语义树举例,结点A对应数据传送操作,结点B、C、D、E、I、J、K、L和N对应非数据传送操作,结点H、F、M、P和O对应原子寻址方式。
分层迭代的原子语义变换阶段C:
该阶段基于三叉语义树,完成具体的指令翻译工作。主要涉及图1的模块104和105。模块104进行具体的转换工作,模块105利用本地编译器最终完成翻译后指令的编译,产生目标平台代码。分层迭代的翻译流程可以参见图4。
图4中首先对DTO层中结点的各种类型进行处理,对跳转opJmp需要判断跳转的类型是无条件跳转、条件跳转或多分支跳转中的哪一种,然后选择目标平台上功能等价的指令进行翻译,进而处理NDTO结点;对调用opCall,首先申请堆栈空间,然后用目标平台的调用指令进行翻译,进而处理NDTO结点;对返回opRet,直接选择目标平台的返回指令进行翻译。对其它非控制类结点,直接选择目标平台上功能等价的指令进行翻译,进而处理NDTO结点。
对NDTO层中的结点,根据非数据传送操作不同的操作类型及寻址方式,生成具体的指令操作符及操作数,若结点包含非叶子子结点,即包含非空子树,则需要递归的对每一棵树再进行NDTO处理。
对End层结点,根据原子寻址方式生成目标平台具体的数据存储单元或常量,主要进行的工作是寄存器映射、内存映射、常量生成等。
Claims (6)
1.一种基于原子操作语义描述的多源二进制代码一体化翻译方法,其特征是:具体含有下列步骤:
步骤1:将源平台的机器指令进行反汇编后得到汇编指令,设计原子操作描述语言,对构成指令的指令原子操作及原子寻址方式分别进行描述,组成刻画指令语义的表达式序列;
步骤2:将表达式序列映射为三叉语义树;
步骤3:采用分层迭代的指令语义等价转换算法,在三叉语义树上通过自顶向下的策略进行分层翻译,然后,利用本地编译器产生目标平台的机器指令。
2.根据权利要求1所述的基于原子操作语义描述的多源二进制代码一体化翻译方法,其特征是:所述步骤1中:原子操作描述语言通过对构成指令的两个基本要素分别进行描述,组成刻画指令语义的表达式序列,该两个基本要素为:指令原子操作和原子寻址方式。
3.根据权利要求2所述的基于原子操作语义描述的多源二进制代码一体化翻译方法,其特征是:所述步骤1中:指令原子操作分为数据传送操作和非数据传送操作两类,数据传送操作指的是不同数据单元间发生传递内容的操作,数据传送操作含有寄存器间数据移动、寄存器与内存数据单元间数据移动、内存数据单元之间的数据移动、跳转、调用和返回;非数据传送操作指的是算术运算操作、逻辑运算操作、移位操作,算术运算操作又细分为:有符号数运算操作、无符号数运算操作、浮点运算操作和整型运算操作;原子寻址方式含有存储器寻址、寄存器寻址和立即寻址,对应指令中操作数位数的不同,原子寻址方式配合字节长度标识来描述出指令操作数的字节长度。
4.根据权利要求1所述的基于原子操作语义描述的多源二进制代码一体化翻译方法,其特征是:所述步骤2中:表达式序列映射为三叉语义树的过程含有以下步骤:
步骤2.1:将表达式序列中的数据传送操作映射为三叉语义树的根结点;在数据传送操作中,跳转、调用和返回对应的根结点含有两个子结点,该两个子结点为条件子结点和目标子结点;除了跳转、调用和返回以外其它的数据传送操作对应的根结点含有三个子结点,该三个子结点从左至右分别为:条件子结点、源子结点、目标子结点;
步骤2.2:将表达式序列中的非数据传送操作映射为三叉语义树中除根结点外的非叶子结点;
步骤2.3:将表达式序列中的基本寻址方式代表的数据单元映射为三叉语义树的叶子结点。
5.根据权利要求4所述的基于原子操作语义描述的多源二进制代码一体化翻译方法,其特征是:所述步骤2.1中:数据传送操作含有赋值、跳转、调用和返回;条件子结点是为条件执行指令设计的,当原子操作中没有涉及到特定的执行条件时,条件子结点为空;
步骤2.2中:表达式序列中的非数据传送操作含有加操作、减操作。
6.根据权利要求4所述的基于原子操作语义描述的多源二进制代码一体化翻译方法,其特征是:所述步骤3中:将三叉语义树的根结点、除根结点外的非叶子结点、叶子结点分别归类到DTO层、NDTO层、End层上,采用自顶向下分析、由下至上生成的转换方法,实现表达式到目标平台指令的翻译,并且,在同一层次上采取相似的处理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2013101726302A CN103235724A (zh) | 2013-05-10 | 2013-05-10 | 基于原子操作语义描述的多源二进制代码一体化翻译方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2013101726302A CN103235724A (zh) | 2013-05-10 | 2013-05-10 | 基于原子操作语义描述的多源二进制代码一体化翻译方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN103235724A true CN103235724A (zh) | 2013-08-07 |
Family
ID=48883769
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2013101726302A Pending CN103235724A (zh) | 2013-05-10 | 2013-05-10 | 基于原子操作语义描述的多源二进制代码一体化翻译方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103235724A (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2015078380A1 (zh) * | 2013-11-27 | 2015-06-04 | 上海芯豪微电子有限公司 | 一种指令集转换系统和方法 |
CN107861879A (zh) * | 2017-11-28 | 2018-03-30 | 成都视达科信息技术有限公司 | 一种实现软件自动化测试的方法和系统 |
CN109634869A (zh) * | 2018-12-21 | 2019-04-16 | 中国人民解放军战略支援部队信息工程大学 | 基于语义等价验证的二进制翻译中间表示正确性测试方法及装置 |
CN110825386A (zh) * | 2019-11-01 | 2020-02-21 | 腾讯科技(深圳)有限公司 | 代码的编译方法和装置、存储介质 |
WO2022057743A1 (zh) * | 2020-09-21 | 2022-03-24 | 华为技术有限公司 | 一种代码处理方法、装置及存储介质 |
WO2022068556A1 (zh) * | 2020-09-30 | 2022-04-07 | 华为技术有限公司 | 一种代码翻译方法、装置及设备 |
CN114461227A (zh) * | 2022-04-13 | 2022-05-10 | 飞腾信息技术有限公司 | 运行软件的方法、装置以及机器可读存储介质 |
CN114995832A (zh) * | 2022-06-28 | 2022-09-02 | 湖南卡姆派乐信息科技有限公司 | 一种动静结合的二进制程序翻译方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO1990001738A1 (en) * | 1988-07-29 | 1990-02-22 | Hunter Systems Software, Inc. | Machine process for translating programs in binary machine language into another binary machine language |
CN101145109A (zh) * | 2007-11-01 | 2008-03-19 | 上海交通大学 | 利用中间指令集的二进制翻译方法 |
-
2013
- 2013-05-10 CN CN2013101726302A patent/CN103235724A/zh active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO1990001738A1 (en) * | 1988-07-29 | 1990-02-22 | Hunter Systems Software, Inc. | Machine process for translating programs in binary machine language into another binary machine language |
CN101145109A (zh) * | 2007-11-01 | 2008-03-19 | 上海交通大学 | 利用中间指令集的二进制翻译方法 |
Non-Patent Citations (1)
Title |
---|
白莉莉: "多源二进制代码一体化翻译关键技术研究", 《中国优秀硕士学位论文全文数据库 信息科技辑》 * |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2015078380A1 (zh) * | 2013-11-27 | 2015-06-04 | 上海芯豪微电子有限公司 | 一种指令集转换系统和方法 |
US10387157B2 (en) | 2013-11-27 | 2019-08-20 | Shanghai Xinhao Microelectronics Co. Ltd. | System and method for instruction set conversion based on mapping of both block address and block offset |
CN107861879A (zh) * | 2017-11-28 | 2018-03-30 | 成都视达科信息技术有限公司 | 一种实现软件自动化测试的方法和系统 |
CN109634869A (zh) * | 2018-12-21 | 2019-04-16 | 中国人民解放军战略支援部队信息工程大学 | 基于语义等价验证的二进制翻译中间表示正确性测试方法及装置 |
CN109634869B (zh) * | 2018-12-21 | 2022-02-01 | 中国人民解放军战略支援部队信息工程大学 | 二进制翻译中间表示正确性测试方法及装置 |
CN110825386A (zh) * | 2019-11-01 | 2020-02-21 | 腾讯科技(深圳)有限公司 | 代码的编译方法和装置、存储介质 |
CN110825386B (zh) * | 2019-11-01 | 2023-07-14 | 腾讯科技(深圳)有限公司 | 代码的编译方法和装置、存储介质 |
WO2022057743A1 (zh) * | 2020-09-21 | 2022-03-24 | 华为技术有限公司 | 一种代码处理方法、装置及存储介质 |
WO2022068556A1 (zh) * | 2020-09-30 | 2022-04-07 | 华为技术有限公司 | 一种代码翻译方法、装置及设备 |
CN114461227A (zh) * | 2022-04-13 | 2022-05-10 | 飞腾信息技术有限公司 | 运行软件的方法、装置以及机器可读存储介质 |
CN114995832A (zh) * | 2022-06-28 | 2022-09-02 | 湖南卡姆派乐信息科技有限公司 | 一种动静结合的二进制程序翻译方法 |
CN114995832B (zh) * | 2022-06-28 | 2023-03-21 | 湖南卡姆派乐信息科技有限公司 | 一种动静结合的二进制程序翻译方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103235724A (zh) | 基于原子操作语义描述的多源二进制代码一体化翻译方法 | |
CN110187885B (zh) | 一种量子程序编译的中间代码生成方法及装置 | |
CN107844294B (zh) | 一种高可用的合约执行方法及系统 | |
CN106462425B (zh) | 使用复常量的方法和系统 | |
CN106648662B (zh) | 基于工程造价计算描述语言bcl的报表生成装置及生成方法 | |
Burke et al. | Concurrent Collections Programming Model. | |
CN102385524B (zh) | 一种基于混编指令集的编译链指令替换方法 | |
CN112527262B (zh) | 深度学习框架编译器宽度非一致自动向量优化方法 | |
CN104820393A (zh) | 一种基于plc梯形图矩阵编译解释方法 | |
CN111770116A (zh) | 一种执行智能合约的方法、区块链节点、存储介质 | |
US8621424B2 (en) | Compiler based code modification for use in document ranking | |
Metcalf | The seven ages of fortran | |
US5561801A (en) | System and method for multilevel promotion | |
CN108664238A (zh) | 一种解释型脚本语言c-sub的执行方法及装置 | |
CN100559344C (zh) | 一种支持用规则记录变量访问专用寄存器组的处理方法 | |
Mong et al. | DynamoSim: a trace-based dynamically compiled instruction set simulator | |
CN112527304B (zh) | 基于异构平台的自适应节点融合编译优化方法 | |
CN107203406B (zh) | 一种面向分布式存储结构的处理方法 | |
CN102446112A (zh) | 指令处理装置和处理器、指令翻译装置和方法 | |
Auler et al. | ACCGen: An automatic ArchC compiler generator | |
CN104461569A (zh) | 一种基于matlab的c/c++程序生成辅助方法 | |
CN112579059B (zh) | 支持有限域数据类型和运算符的编译方法 | |
Gärtner et al. | π-RED+ An interactive compiling graph reduction system for an applied λ-calculus | |
Ambrose et al. | SDG2KPN: System Dependency Graph to function-level KPN generation of legacy code for MPSoCs | |
Sunitha | Compiler construction |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20130807 |