CN101763242B - 二进制翻译中的字节序调整方法 - Google Patents
二进制翻译中的字节序调整方法 Download PDFInfo
- Publication number
- CN101763242B CN101763242B CN2010103000185A CN201010300018A CN101763242B CN 101763242 B CN101763242 B CN 101763242B CN 2010103000185 A CN2010103000185 A CN 2010103000185A CN 201010300018 A CN201010300018 A CN 201010300018A CN 101763242 B CN101763242 B CN 101763242B
- Authority
- CN
- China
- Prior art keywords
- effective address
- binary translation
- metainstruction
- address
- byte
- 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.)
- Expired - Fee Related
Links
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开了一种计算机技术领域的二进制翻译中的字节序调整方法,包括以下步骤:动态二进制翻译系统的执行引擎加载源程序可执行映像,将各个程序段的内容进行字节序调整,同时调整加载进来的参数个数、参数内容和环境变量;修改表示内存访问的中间指令的有效地址,使修改后的有效地址的表达符合源程序内存访问指令的语义,以在内存中加载或存储正确的数据;前端解码器将源程序指令翻译为中间指令,然后将生成的中间指令加入到构建的中间指令基本块中,直到发生直接跳转或系统调用,则结束当前基本块的构造,并将该基本块发送到后端执行。本发明采用修改内存地址的方法避免了内存数据字节顺序的搬移,高效准确,在二进制翻译领域具有通用性。
Description
技术领域
本发明涉及的是一种计算机技术领域的方法,具体是一种二进制翻译中的字节序调整方法。
背景技术
动态二进制翻译技术是进程级虚拟机领域中重要的组成部分,它将对应源机器平台的二进制代码动态翻译为可在目标机器平台上运行的二进制代码,是解决遗留代码和提高软件平台适应性的一种有效手段,为软件移植和改善系统性能提供了途径。
字节序是计算机体系结构的一个基本属性,是计算机处理数据时对内存中多字节数据的高位和低位进行判定的方法。字节序有两种:大端字节序(Big Endian)和小端字节序(Little Endian)。Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。而Little-Endian则正好相反,低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。典型的大端平台包括PowerPC和SPARC,而小端平台的应用则更广泛些,包括X86,MIPS以及ARM等。动态二进制翻译中的源机器平台和目标机器平台的字节序往往是不同的,这时对同一条指令,它们的“理解”就变成相反的了。要使源机器平台的程序能够正确地在目标机器平台上执行,就需要在翻译的过程中对字节序进行调整。
目前在动态二进制翻译领域中解决字节序调整的方法并不多,主要的思想就是通过修改访存指令(Load和Store指令)的结果,使其符合目标机器平台的字节序。其中最典型的一种方法就是Byte Swapping(字节翻转):将每次读取或写入内存的数据都做一次字节翻转(byte swap),即翻转数据内部的字节顺序。有些处理器提供了一些特性,以简化ByteSwapping的过程。比如,Intel公司的80486及其向上的处理器提供了bswap这条指令来处理“跨字节序”(Cross-endian)的问题。
还有少数处理器,如IBM公司的PowerPC处理器提供了lwbrx,lhbrx,swbrx,shbrx等特殊的load-store(加载-存储)指令,这些指令用相反的字节序来访问内存,从而避免了上述的Byte Swapping过程。例如:lwbrx RT,RA,RB这条指令就是从地址(RA|0)+(RB)处装载一个字的数据到寄存器RT,字的0:7位装载到RT的24:31位,字的8:15位装载到RT的16:23位,字的16:23位装载到RT的8:15位,字的24:31位装载到RT的0:7位。
经过对现有文献的检索发现,美国专利号为:5867690,公开时间:1999年2月2日,名称: Apparatus For Converting Data Between Different Endian Formats And SystemAnd Method Employing Same,该技术提供了一种在不同字节序系统之间转换数据的方法及其装置,其在处理器和存储设备之间实现了一个Byte Swapping Device(字节翻转设备),使得处理器能够处理存储设备中字节序与其不同的数据。但是,尽管是硬件的实现,上述技术还是需要搬移数据的内部字节顺序,而逻辑单元也较为繁琐,所以这个搬移的开销是非常大的。对于那些没有硬件体系结构支持的处理器来说,Byte Swapping的开销则更为巨大,对系统性能有较大的制约。
发明内容
本发明的目的在于克服现有技术的上述不足,提供了一种二进制翻译中的字节序调整方法。本发明基于中间指令来调整字节序,既能使源机器平台的程序能够正确地在目标机器平台上执行,又能提高跨平台翻译的性能。
本发明是通过以下技术方案实现的,包括以下步骤:
第一步,动态二进制翻译系统的执行引擎加载源程序可执行映像,将各个程序段的内容进行字节序调整,同时调整加载进来的参数个数、参数内容和环境变量。
所述的动态二进制翻译系统包括:前端解码器(Front-End)、中端优化器(Middle-End)、后端编码器(Back-End)和中间指令集,其中:前端解码器与中间指令集相连传输源程序,中间指令集和中端优化器相连传输中间代码信息,中端优化器与后端编码器相连传输优化后的中间代码信息,后端编码器输出编码后的代码信息。
所述的动态二进制翻译系统是昆士兰大学的UQDBT系统,或者是弗吉尼亚大学的strata系统,或者是上海交通大学的CrossBit系统。
第二步,修改表示内存访问的中间指令的有效地址,使修改后的有效地址的表达符合源程序内存访问指令的语义,以在内存中加载或存储正确的数据。
所述的修改后的有效地址等于,内存中数据的最高地址与数据的最低地址的和,减去访存指令操作的字节数与源程序要访问的有效地址的和。
所述的修改后的有效地址适用于地址以字为单位进行分配的体系结构,并且存储器访问都是对齐的,即:半字从双字节的边界加载和存储,字从四字节的边界加载和存储,根据表示内存访问的中间指令的参数求出该访存指令访问的有效地址,然后更新有效地址以完成中间指令的修改,具体过程为:
1)如果访问的是字节数据,将有效地址和4做求模运算得i,如果i为0,则将该有效地址加3;如果i为1,则将该有效地址加1;如果i为2,则将该有效地址减1;如果i为3,则将该有效地址减3;
2)如果访问的是半字数据,将有效地址和4做求模运算得i,如果i为0,则将该有效地址加2;如果i为2,则将该有效地址减2;
3)如果访问的是字数据,无需做地址转换。
第三步,前端解码器将源程序指令翻译为中间指令,然后将生成的中间指令加入到构建的中间指令基本块中,直到发生直接跳转或系统调用,则结束当前基本块的构造,并将该基本块发送到后端执行。
与现有技术相比,本发明的有益效果是:通过修改访存指令的有效地址,无需搬移数据内部字节顺序,完成不同字节序平台之间的程序翻译,并且获得很好的性能提升。
具体实施方式
以下对本发明的方法进一步描述:本实施例在以本发明技术方案为前提下进行实施,给出了详细的实施方式和具体的操作过程,但本发明的保护范围不限于下述的实施例。
实施例
本实施例用于对LD指令进行字节序调整,包括步骤如下:
第一步,动态二进制翻译系统的执行引擎加载源程序可执行映像,将各个程序段的内容进行字节序调整,同时调整加载进来的参数个数、参数内容和环境变量。
所述的动态二进制翻译系统是昆士兰大学的UQDBT系统,或者是弗吉尼亚大学的strata系统,或者是上海交通大学的CrossBit系统,其中:UQDBT系统参见发表于《Proceedingsof the ACM SIGPLAN Workshop on Dynamic and Adaptive Compilation and Optimization(美国计算机协会SIGPALN组织关于动态和自适应编译与优化的附属会议)》上的“Machine-Adaptable Dynamic Binary Translation(可自适应机器的动态二进制翻译)”文献,或者是UQDBT系统项目的主页http://www.itee.uq.edu.au/~cristina/uqbt.html;strata系统参见发表于2001年《IEEE Workshop on Binary Translation(美国电气和电子工程师协会关于二进制翻译的附属会议)》上的“Strata:A Software DynamicTranslation Infrastructure(strata:一个软件动态翻译的框架)”文献,或者是strata系统项目的主页http://www.cs.pitt.edu/coco/strata;CrossBit系统参见2007年发表于《计算机工程》上的“动态二进制翻译基础平台CrossBit的设计与实现”文献,或者是CrossBit系统的项目主页:202.120.40.100。
本实施例采用的二进制翻译系统是上海交通大学的CrossBit系统,该系统以MIPS(MIPS公司开发的精简指令集微处理器)为前端体系结构、PowerPC为后端体系结构来完成二进制翻译中的字节序的调整,CrossBit系统采用VINST作为中间指令集,VINST是一种低层次的类RISC指令集,具有无穷多个32位虚拟寄存器、Load-Store风格体系结构、唯一的偏址寻址模式,VINST的内存访问指令包括LD指令和ST指令。
CrossBit的执行引擎将MIPS体系结构的可执行文件映像加载到CrossBit内存空间中,并读取代码段入口地址,加载过程中需对源程序的各段进行字节序翻转。源机器平台和目标机器平台的字节顺序不同,源程序映像(以ELF文件为例)的.text段(代码段)和.bss段(存放程序中未初始化的全局变量的一块内存区域)在加载的时候都需要进行字节序的翻转。设置堆栈时,压入的参数(参数个数和参数内容)和环境变量也要做字节序翻转处理。
第二步,修改表示内存访问的中间指令的有效地址,使修改后的有效地址的表达符合源程序内存访问指令的语义,以在内存中加载或存储正确的数据。
所述的修改后的有效地址等于,内存中数据的最高地址与数据的最低地址的和,减去访存指令操作的字节数与源程序要访问的有效地址的和。
LD指令有4个参数:源寄存器reg、偏移量disp、数据的大小size和目标寄存器dst,访存的有效地址ea即为:ea=[reg]+disp。
1)如果size=1,即加载字节数据,对ea和4做求模运算得到i(i=ea%4),如果i=0,则修改后的有效地址ea′=ea+3;如果i=1,则修改后的有效地址ea′=ea+1;如果i=2,则修改后的有效地址ea′=ea-1;如果i=3,则修改后的有效地址ea′=ea-3;
2)如果size=2,即加载半字数据,对ea和4做求模运算得到i(i=ea%4),如果i=0,则修改后的有效地址ea′=ea+2;如果i=2,则修改后的有效地址ea′=ea-2;
3)如果size=4,即加载字数据,无需做地址转换。
第三步,入口地址传递到前端解码器的解码函数中进行指令解释,将源程序指令翻译为一条到若干条VINST中间指令,然后将生成的中间指令封装到构建的中间指令基本块(VBlock)中,直到发生直接跳转或系统调用,则结束当前基本块的构造,将该基本块发送到后端,调用后端编码器,编码函数以中间指令块VBlock为输入,将生成的后端目标代码(PowerPC指令)插入到目标代码块TBlock中,TBlock代表了一个可运行的目标代码块。TBlock包含有唯一的入口(Entry)和若干个出口(Exit),CrossBit从TBlock入口开始进入目标代码的执行,随后从出口返回。
本实施例的优点:利用MIPS和PowerPC体系结构存储器格式的特点,通过修改表示内存访问的中间指令的有效地址,正确地表达了源程序的内存访问指令的语义,从而无需搬移数据本身的内部字节顺序,完成不同字节序平台之间的程序翻译,并且获得很好的性能提升。
Claims (3)
1.一种二进制翻译中的字节序调整方法,其特征在于,包括以下步骤:
第一步,动态二进制翻译系统的执行引擎加载源程序可执行映像,将各个程序段的内容进行字节序调整,同时调整加载进来的参数个数、参数内容和环境变量;
所述的字节序调整是指:动态二进制翻译系统的执行引擎将MIPS体系结构的可执行文件映像加载到动态二进制翻译系统内存空间中,并读取代码段入口地址,加载过程中需对源程序的各段进行字节序翻转,源机器平台和目标机器平台的字节顺序不同,则源程序映像的.text段和.bss段,在加载的时候都需要进行字节序的翻转,设置堆栈时,压入的参数,即参数个数和参数内容和环境变量也要做字节序翻转处理;
第二步,修改表示内存访问的中间指令的有效地址,使修改后的有效地址的表达符合源程序内存访问指令的语义,以在内存中加载或存储正确的数据;
所述的修改后的有效地址等于,内存中数据的最高地址与数据的最低地址的和,减去访存指令操作的字节数与源程序要访问的有效地址的和;
所述的修改后的有效地址适用于地址以字为单位进行分配的体系结构,并且存储器访问都是对齐的,即:半字从双字节的边界加载和存储,字从四字节的边界加载和存储,根据表示内存访问的中间指令的参数求出该访存指令访问的有效地址,然后更新有效地址以完成中间指令修改,具体过程为:
1)如果访问的是字节数据,将有效地址和4做求模运算得i,如果i为0,则将该有效地址加3;如果i为1,则将该有效地址加1;如果i为2,则将该有效地址减1;如果i为3,则将该有效地址减3;
2)如果访问的是半字数据,将有效地址和4做求模运算得i,如果i为0,则将该有效地址加2;如果i为2,则将该有效地址减2;
3)如果访问的是字数据,无需做地址转换;
第三步,前端解码器将源程序指令翻译为中间指令,然后将生成的中间指令加入到构建的中间指令基本块中,直到发生直接跳转或系统调用,则结束当前基本块的构造,并将该基本块发送到后端执行。
2.根据权利要求1所述的二进制翻译中的字节序调整方法,其特征是,所述的动态二进制翻译系统包括:前端解码器、中端优化器、后端编码器和中间指令集,其中:前端解码器与中间指令集相连传输源程序,中间指令集和中端优化器相连传输中间代码信息,中端优化器与后端编码器相连传输优化后的中间代码信息,后端编码器输出编码后的代码信息。
3.根据权利要求2所述的二进制翻译中的字节序调整方法,其特征是,所述的动态二进制翻译系统是昆士兰大学的UQDBT系统,或者是弗吉尼亚大学的strata系统,或者是上海交通大学的CrossBit系统。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010103000185A CN101763242B (zh) | 2010-01-04 | 2010-01-04 | 二进制翻译中的字节序调整方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010103000185A CN101763242B (zh) | 2010-01-04 | 2010-01-04 | 二进制翻译中的字节序调整方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101763242A CN101763242A (zh) | 2010-06-30 |
CN101763242B true CN101763242B (zh) | 2011-06-29 |
Family
ID=42494421
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2010103000185A Expired - Fee Related CN101763242B (zh) | 2010-01-04 | 2010-01-04 | 二进制翻译中的字节序调整方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101763242B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101976187B (zh) * | 2010-11-16 | 2012-12-26 | 广州迪庆电子科技有限公司 | 反编译过程中的堆栈跟踪方法、装置及反编译器 |
CN104049949B (zh) * | 2014-05-30 | 2016-10-05 | 南阳理工学院 | 一种面向bswap指令的窥孔优化方法 |
CN109977061B (zh) * | 2017-12-28 | 2023-04-11 | 中兴通讯股份有限公司 | 一种中断处理方法及中断处理装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5253350A (en) * | 1987-10-30 | 1993-10-12 | Zenith Data Systems Corporation | Method of combining lower order and translated upper order bits to address ROM within a range reserved for other devices |
CN1532722A (zh) * | 2003-03-19 | 2004-09-29 | ���µ�����ҵ��ʽ���� | 字节序不同的处理器间共享数据的数据共享装置和处理器 |
CN101145109A (zh) * | 2007-11-01 | 2008-03-19 | 上海交通大学 | 利用中间指令集的二进制翻译方法 |
-
2010
- 2010-01-04 CN CN2010103000185A patent/CN101763242B/zh not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5253350A (en) * | 1987-10-30 | 1993-10-12 | Zenith Data Systems Corporation | Method of combining lower order and translated upper order bits to address ROM within a range reserved for other devices |
CN1532722A (zh) * | 2003-03-19 | 2004-09-29 | ���µ�����ҵ��ʽ���� | 字节序不同的处理器间共享数据的数据共享装置和处理器 |
CN101145109A (zh) * | 2007-11-01 | 2008-03-19 | 上海交通大学 | 利用中间指令集的二进制翻译方法 |
Also Published As
Publication number | Publication date |
---|---|
CN101763242A (zh) | 2010-06-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Franz | Dynamic linking of software components | |
US7823139B2 (en) | Method and system for translating programming languages | |
US20050136939A1 (en) | End-to-end architecture for mobile client JIT processing on network infrastructure trusted servers | |
US8032873B2 (en) | Computer program code size partitioning system for multiple memory multi-processing systems | |
JP2002504725A (ja) | 最適化先読みコンパイラを使用したジャバ開発環境 | |
JP2001508909A (ja) | バーチャルマシン命令を処理するためのデータ処理装置 | |
CN102385524A (zh) | 一种基于混编指令集的编译链指令替换方法 | |
CN101763242B (zh) | 二进制翻译中的字节序调整方法 | |
CN101299192A (zh) | 一种非对齐访存的处理方法 | |
CN102087609A (zh) | 多处理器平台下的动态二进制翻译方法 | |
US7814467B2 (en) | Program optimization using object file summary information | |
CN111770116A (zh) | 一种执行智能合约的方法、区块链节点、存储介质 | |
CN111815310A (zh) | 一种执行智能合约的方法、区块链节点和存储介质 | |
US8539458B2 (en) | Transforming addressing alignment during code generation | |
Aslam et al. | Optimized java binary and virtual machine for tiny motes | |
CN102455903A (zh) | 一种用户应用界面的生成方法 | |
JP4768984B2 (ja) | コンパイル方法、コンパイルプログラムおよびコンパイル装置 | |
CN107315632A (zh) | 一种双调合并排序方法及系统 | |
Moon et al. | SYZYGY-a framework for scalable cross-module IPO | |
Franz | Run-time code generation as a central system service | |
US11403082B1 (en) | Systems and methods for increased bandwidth utilization regarding irregular memory accesses using software pre-execution | |
CN114443052A (zh) | 一种il指令运行时的动态特例化方法和装置 | |
CN102819435B (zh) | 一种Java虚拟机的位置无关代码生成方法 | |
CN103150196B (zh) | 动态二进制翻译中代码Cache管理方法 | |
Vishkin | From algorithm parallelism to instruction-level parallelism: An encode-decode chain using prefix-sum |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20110629 Termination date: 20180104 |
|
CF01 | Termination of patent right due to non-payment of annual fee |