CN103365665A - 一种基于虚拟指令的应用程序移植方法 - Google Patents
一种基于虚拟指令的应用程序移植方法 Download PDFInfo
- Publication number
- CN103365665A CN103365665A CN2013103162643A CN201310316264A CN103365665A CN 103365665 A CN103365665 A CN 103365665A CN 2013103162643 A CN2013103162643 A CN 2013103162643A CN 201310316264 A CN201310316264 A CN 201310316264A CN 103365665 A CN103365665 A CN 103365665A
- Authority
- CN
- China
- Prior art keywords
- instruction
- fictitious order
- add
- assembly
- reg
- 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
Classifications
-
- 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
- G06F9/45516—Runtime code conversion or optimisation
- G06F9/4552—Involving translation to a different instruction set architecture, e.g. just-in-time translation in a JVM
-
- 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/41—Compilation
- G06F8/44—Encoding
- G06F8/447—Target code generation
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种基于虚拟指令的应用程序移植方法,涉及程序移植技术,旨在提供一种能快速便捷的将Windows平台的应用程序移植到iOS平台或Android平台等其他应用平台的方法。本发明采用的技术方案如下:包括:步骤101:在Windows系统中将应用程序转换为汇编代码;步骤102:在Windows系统中将汇编代码按照一套虚拟指令集的语法逐一转换为对应的虚拟指令,从而得到虚拟化的汇编代码;步骤103:将所述虚拟化的汇编代码拷贝到其他应用平台上经过编译后运行;所述虚拟指令集中至少有一条指令与汇编指令集中的一条指令对应;且所述虚拟指令集中的每一条指令为一个C语言编写的宏或函数,包含至少一条C语言指令。
Description
技术领域
本发明涉及程序移植技术,尤其是一种便捷的基于虚拟指令的应用程序移植方法。
背景技术
随着智能手机的普及及性能的不断提高,消费者希望能在手机平台上运行更多的应用程序。如希望能在Windows系统中运行的免费应用程序也能在手机平台上运行。目前手机的主流平台包括iOS系统及Android系统。如果直接进行应用程序软件开发,编写适合手机平台的代码,是很费时间和精力的,很可能出现适用于手机平台的这种应用程序还未开发出来,消费者又开始关注另一种应用程序的情况,那么这样做显然不具备市场效益。因此,亟需一种能快速便捷的将Windows平台的应用程序移植到iOS平台或Android平台等其他应用平台的方法。
发明内容
本发明所要解决的技术问题是:针对上述存在的问题,提供一种基于虚拟指令的应用程序移植方法。
本发明采用的技术方案如下:包括:
步骤101:在Windows系统中将应用程序转换为汇编代码;
步骤102:在Windows系统中将汇编代码按照一套虚拟指令集的语法逐一转换为对应的虚拟指令,从而得到虚拟化的汇编代码;
步骤103:将所述虚拟化的汇编代码拷贝到其他应用平台上,经过编译后运行;
所述虚拟指令集中至少有一条指令与汇编指令集中的一条指令对应;且所述虚拟指令集中的每一条指令为一个C语言编写的宏或函数,包含至少一条C语言指令。
优选地,所述其他应用平台为iOS系统或Android系统。
优选地,所述汇编指令集为Intel x86汇编指令集。
综上所述,由于采用了上述技术方案,本发明的有益效果是:
由于使用一固定的虚拟指令集及其文法,可以实现应用程序对应的汇编代码的批量虚拟化,提高工作效率。所述虚拟指令集及其文法可由本领域技术人员自行定义。
虚拟指令集中至少一条指令与已有的标准汇编指令及中的一条指令对应,例如虚拟指令集中的加法指令“add_d0(reg,imm)”对应Intel x86指令集中的“add reg,imm”指令,从而可以快速实现汇编指令向虚拟指令的转换。
虚拟指令集中的每一条指令实际为一C语言编写的宏或函数,从而使得转换后的虚拟化汇编代码能够在一切兼容C语言的平台上运行,例如iOS平台及Android平台。当然,能兼容C语言的平台很广,基本目前所有的平台都能运行C语言代码,可见,采用本方法可以实现Windows平台上应用程序往其他任何应用平台移植。
附图说明
本发明将通过例子并参照附图的方式说明,其中:
图1为本发明代码处理流程图。
图2为Intel x86汇编指令集其中部分指令与本发明提出的一种虚拟指令集指令的对应示意图。
具体实施方式
本说明书中公开的所有特征,或公开的所有方法或过程中的步骤,除了互相排斥的特征和/或步骤以外,均可以以任何方式组合。
本说明书中公开的任一特征,除非特别叙述,均可被其他等效或具有类似目的的替代特征加以替换。即,除非特别叙述,每个特征只是一系列等效或类似特征中的一个例子而已。
如图1,本发明公开的应用程序移植方法包括:
步骤101:在Windows系统中将应用程序转换为汇编代码;
步骤102:在Windows系统中将汇编代码中的各个汇编指令按照一套虚拟指令集的文法逐一转换为对应的虚拟指令,从而得到虚拟化的汇编代码;
步骤103:将所述虚拟化的汇编代码拷贝到其他应用平台上经过编译后运行。
其中,所述的虚拟指令集可以是本领域技术人员根据其编程习惯自行定义,但是需要满足以下基本条件:所述虚拟指令集中至少有一条指令与汇编指令集中的一条指令对应;且所述虚拟指令集中的每一条指令为一个C语言编写的宏或函数,包含至少一条C语言指令。
现以Intel x86汇编指令集及文法为例,阐述本发明公开的一个虚拟指令集及文法实施例,但是本领域技术人员不应当将本实施例理解为对本发明的限制,申请人在此公开这一虚拟指令集目的在于教导本领域技术人员如何去自行定义一套等同的虚拟指令集。
本领域技术人员知晓Intel x86汇编语法实现的指令通用格式为:inst1op1或inst2 op1,op2或inst3 op1,op2,op3,其中inst为Intel x86汇编指令助记符,如mov,add,and…。op为操作码,操作码可以是寄存器,可以是内存,也可以是立即数。
对比可以设计如下文法实现虚拟指令:
virtualInstname & flag?
&(&oprd?&)
namename_
flageflags_?&type
oprdreg|
ptr|imm
eflagsn?&f
typemem&num
memb|w|d|q|t|
x
num0|1|2
fa|b|e|g|l|o|p|c
对上述符号的解释如下:
virtualInst:虚拟汇编指令
name:汇编指令助记符
flag:条件标志位,操作数类型标志
oprd:操作数
reg:寄存器
ptr:内存指针
imm:立即数
eflags:条件标识位
type:操作数类型
mem:内存操作数类型
num:内存操作数在指令操作数第几位(从零开始)
b:byte,字节
w:word,字
d:dword,双字
q:qword,四字
t:tbyte,八字
x:多媒体指令后缀
a:above,无符号数大于
b:below,无符号数小于
e:equal,等于
g:greater,有符号数大于
l:less,有符号数小于
o:overflow,操作溢出
p:parity,最低有效字节比特位为1的个数为偶数
c:carry,无符号数计算进位
?为占位符,例如下文add_d0()中的d或0;&为连接符,例如下文add_d0()中add_与d0连接为add_d0形成一条完整的虚拟指令助记符。
有了以上虚拟指令集的定义,任意Intel x86指令均可以改写为虚拟指令。
现分别用三条不同类型加法指令说明上述转换原理:
Intel x86通用加法指令为add,浮点加法指令为fadd,多媒体加法指令为addpd。
其中,通用加法指令add有如下形式:add reg,imm;add reg,reg;addreg,mem;add mem,imm;add mem,reg,其影响的标志寄存器有c,a,z,s。reg:寄存器,imm:立即数,mem:内存变量。
针对上述Intel x86指令可定义如下不影响标志位的虚拟指令:
add_d0(reg,imm),add_d0(reg,reg),add_d2(reg,mem),add_d1(mem,imm),add_d1(mem,reg)。
影响z标志的虚拟指令为:
add_z_d0(reg,imm),add_z_d0(reg,reg),add_z_d2(reg,mem),add_z_d1(mem,imm),add_z_d1(mem,reg),add_nz_d0(reg,imm),add_nz_d0(reg,reg),add_nz_d2(reg,mem),add_nz_d1(mem,imm)add_nz_d1(mem,reg)。
影响其他标志位的虚拟指令依次类推。
又如:Intel x86的浮点加法指令fadd有如下形式:fadd reg,reg;faddmem32;fadd mem64,其中mem32为32位存储器变量,mem64为64位存储器变量。可对应定义出虚拟指令fadd_d0(reg,reg),fadd_d1(mem32),fadd_q1(mem64)。
Intel x86的多媒体加法指令addpd有如下形式addpd reg,reg;addpdreg,mem64,对应定义出虚拟指令addpd_x0(reg,reg),addpd_q2(reg,mem64)。
其他Intel x86指令依次类推都可以改写为虚拟指令的形式。
上述各个虚拟指令实质是一个C语言实现的宏或函数。例如
add_d0(reg,imm)的C语言实现为:#define add_d0(reg,imm)reg+=imm。
___cc95___:
mov edx,offset;
Objplaneparams;
lea edx,[edx+4*edi+0x10];
mov eax,dword ptr;
ds:[edx];
mov eax,dword ptr ds:[eax];
and eax,0x000000ff;
movss;
xmm0,dword ptr ds:[eax*4+fplanestartparams];
add dword ptr;
ds:[edx],0x4;
mov eax,dword ptr ds:[ebx+0x1c];
mov ecx,dword ptr;
ds:[eax+0x0c];
mov edx,dword ptr ds:[eax+0x10];
sub edx,ecx;
sar;
edx,0x3;
cmp edi,edx;
jnb___cdd5___
mov edx,dword ptr;
ds:[edi*8+ecx];
mov eax,dword ptr ds:[edx+0x14];
mov ecx,dword ptr;
ds:[edx+0x4];
neg eax;
inc edi;
add eax,dword ptr ss:[ebp-0x2c];
imul
eax,dword ptr ds:[edx+0x40];
sub eax,dword ptr ds:[edx+0x10];
cmp edi,dword;
ptr ds:[ebx+0x10];
lea edx,[esi*4+ecx];
movss dword ptr;
ds:[eax*4+edx],xmm0;
jl short___cc95___
通过转换我们可以得到如下虚拟化汇编代码:
___cc95___:
mov_d0(edx,_offs(_addr(objplaneparams)));
lea_d0(edx,edx+4*edi+0x10);
mov_d2(eax,_mem(edx));
mov_d2(eax,_mem(eax));
and_d0(eax,0x000000ff);
movss_d2(xmm0,_mem(eax*4+_uval(fplanestartparams)));
add_d1(_mem(edx),0x4);
mov_d2(eax,_mem(ebx+0x1c));
mov_d2(ecx,_mem(eax+0x0c));
mov_d2(edx,_mem(eax+0x10));
sub_d0(edx,ecx);
sar_d0(edx,0x3);
cmp_nb_d0(edi,edx);
jnb_d0(___cdd5___);
mov_d2(edx,_mem(edi*8+ecx));
mov_d2(eax,_mem(edx+0x14));
mov_d2(ecx,_mem(edx+0x4));
neg_d0(eax);
inc_d0(edi);
add_d2(eax,_loc(ebp-0x2c));
imul2_d2(eax,_mem(edx+0x40));
sub_d2(eax,_mem(edx+0x10));
cmp_l_d2(edi,_mem(ebx+0x10));
lea_d0(edx,esi*4+ecx);
movss_d1(_mem(eax*4+edx),xmm0);
jl_d0(___cc95___);
当我们定义一套虚拟指令后,便可实现汇编代码的虚拟化,由于每条虚拟化指令由ANSI标准C语言实现,实现了应用程序的无源代码级移植。
本发明并不局限于前述的具体实施方式。本发明扩展到任何在本说明书中披露的新特征或任何新的组合,以及披露的任一新的方法或过程的步骤或任何新的组合。
Claims (3)
1.一种基于虚拟指令的应用程序移植方法,其特征在于,包括:
步骤101:在Windows系统中将应用程序转换为汇编代码;
步骤102:在Windows系统中将汇编代码按照一套虚拟指令集的语法逐一转换为对应的虚拟指令,从而得到虚拟化的汇编代码;
步骤103:将所述虚拟化的汇编代码拷贝到其他应用平台上,经过编译后运行;
所述虚拟指令集中至少有一条指令与汇编指令集中的一条指令对应;且所述虚拟指令集中的每一条指令为一个C语言编写的宏或函数,包含至少一条C语言指令。
2.根据权利要求1所述的一种基于虚拟指令的应用程序移植方法,其特征在于,所述其他应用平台为iOS系统或Android系统。
3.根据权利要求1所述的一种基于虚拟指令的应用程序移植方法,其特征在于,所述汇编指令集为Intel x86汇编指令集。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2013103162643A CN103365665A (zh) | 2013-07-25 | 2013-07-25 | 一种基于虚拟指令的应用程序移植方法 |
PCT/CN2014/073905 WO2015010479A1 (zh) | 2013-07-25 | 2014-03-21 | 一种基于虚拟指令的应用程序移植方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2013103162643A CN103365665A (zh) | 2013-07-25 | 2013-07-25 | 一种基于虚拟指令的应用程序移植方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN103365665A true CN103365665A (zh) | 2013-10-23 |
Family
ID=49367100
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2013103162643A Pending CN103365665A (zh) | 2013-07-25 | 2013-07-25 | 一种基于虚拟指令的应用程序移植方法 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN103365665A (zh) |
WO (1) | WO2015010479A1 (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2015010479A1 (zh) * | 2013-07-25 | 2015-01-29 | 成都品果科技有限公司 | 一种基于虚拟指令的应用程序移植方法 |
CN104503819A (zh) * | 2015-01-05 | 2015-04-08 | 中国科学院计算技术研究所 | 一种面向异os的汇编器及汇编移植方法 |
CN106371809A (zh) * | 2016-08-31 | 2017-02-01 | 北京奇虎科技有限公司 | 线程处理器及线程处理方法 |
CN108304188A (zh) * | 2016-08-25 | 2018-07-20 | 平安科技(深圳)有限公司 | 一种数据类型转换方法及终端 |
CN108369499A (zh) * | 2015-12-04 | 2018-08-03 | 华为技术有限公司 | 编译器自动代码虚拟化 |
CN109189470A (zh) * | 2018-08-21 | 2019-01-11 | 北京奇虎科技有限公司 | 代码加固方法及装置 |
CN112130859A (zh) * | 2019-06-25 | 2020-12-25 | 深信服科技股份有限公司 | 一种应用运行方法、装置、设备及存储介质 |
CN115688708A (zh) * | 2023-01-03 | 2023-02-03 | 江西曼荼罗软件有限公司 | 一种适用多种操作系统的病历编辑器控制方法及系统 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1265488A (zh) * | 2000-03-06 | 2000-09-06 | 周大凯 | 程序执行方法 |
US20070006178A1 (en) * | 2005-05-12 | 2007-01-04 | Microsoft Corporation | Function-level just-in-time translation engine with multiple pass optimization |
CN101145109A (zh) * | 2007-11-01 | 2008-03-19 | 上海交通大学 | 利用中间指令集的二进制翻译方法 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5946487A (en) * | 1996-06-10 | 1999-08-31 | Lsi Logic Corporation | Object-oriented multi-media architecture |
CN101000557B (zh) * | 2006-01-13 | 2011-10-19 | 北京金远见电脑技术有限公司 | 虚拟机 |
WO2008091105A1 (en) * | 2007-01-22 | 2008-07-31 | E3Net Co., Ltd. | Method for generating cross platform program and middleware platform layer thereof |
CN101593127A (zh) * | 2008-05-27 | 2009-12-02 | 商埃曲网络软件(上海)有限公司 | 一种数字电视中间件系统的跨平台Jave虚拟机 |
CN103365665A (zh) * | 2013-07-25 | 2013-10-23 | 成都品果科技有限公司 | 一种基于虚拟指令的应用程序移植方法 |
-
2013
- 2013-07-25 CN CN2013103162643A patent/CN103365665A/zh active Pending
-
2014
- 2014-03-21 WO PCT/CN2014/073905 patent/WO2015010479A1/zh active Application Filing
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1265488A (zh) * | 2000-03-06 | 2000-09-06 | 周大凯 | 程序执行方法 |
US20070006178A1 (en) * | 2005-05-12 | 2007-01-04 | Microsoft Corporation | Function-level just-in-time translation engine with multiple pass optimization |
CN101145109A (zh) * | 2007-11-01 | 2008-03-19 | 上海交通大学 | 利用中间指令集的二进制翻译方法 |
Non-Patent Citations (1)
Title |
---|
吴浩: "二进制翻译系统 QEMU 的优化技术", 《中国优秀硕士学位论文全文数据库》 * |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2015010479A1 (zh) * | 2013-07-25 | 2015-01-29 | 成都品果科技有限公司 | 一种基于虚拟指令的应用程序移植方法 |
CN104503819A (zh) * | 2015-01-05 | 2015-04-08 | 中国科学院计算技术研究所 | 一种面向异os的汇编器及汇编移植方法 |
CN108369499A (zh) * | 2015-12-04 | 2018-08-03 | 华为技术有限公司 | 编译器自动代码虚拟化 |
CN108369499B (zh) * | 2015-12-04 | 2021-04-20 | 华为技术有限公司 | 一种代码虚拟化系统和方法 |
CN108304188A (zh) * | 2016-08-25 | 2018-07-20 | 平安科技(深圳)有限公司 | 一种数据类型转换方法及终端 |
CN108304188B (zh) * | 2016-08-25 | 2021-11-26 | 平安科技(深圳)有限公司 | 一种数据类型转换方法及终端 |
CN106371809A (zh) * | 2016-08-31 | 2017-02-01 | 北京奇虎科技有限公司 | 线程处理器及线程处理方法 |
CN106371809B (zh) * | 2016-08-31 | 2019-03-01 | 北京奇虎科技有限公司 | 线程处理器及线程处理方法 |
CN109189470A (zh) * | 2018-08-21 | 2019-01-11 | 北京奇虎科技有限公司 | 代码加固方法及装置 |
CN112130859A (zh) * | 2019-06-25 | 2020-12-25 | 深信服科技股份有限公司 | 一种应用运行方法、装置、设备及存储介质 |
CN115688708A (zh) * | 2023-01-03 | 2023-02-03 | 江西曼荼罗软件有限公司 | 一种适用多种操作系统的病历编辑器控制方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
WO2015010479A1 (zh) | 2015-01-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103365665A (zh) | 一种基于虚拟指令的应用程序移植方法 | |
CN102109977B (zh) | 位范围隔离指令、方法和装置 | |
JP6227621B2 (ja) | 複数の試験ソースに対するor試験及びand試験機能を提供するために命令をフュージングする方法及び装置 | |
KR100327777B1 (ko) | 다중명령 세트를 이용한 데이터 프로세싱 장치 | |
KR101411064B1 (ko) | 단일 명령어에서 시프트 및 배타적 or 연산을 수행하는 방법 및 장치 | |
CN104040484B (zh) | 浮点缩放处理器、方法、系统和指令 | |
US8490066B2 (en) | Profiler for optimizing processor architecture and application | |
CN103793201A (zh) | 提供向量压缩和旋转功能的指令和逻辑 | |
CN100530164C (zh) | 一种risc处理器及其寄存器标志位处理方法 | |
CN104915181A (zh) | 条件存储器错误帮助抑制 | |
WO2012136975A1 (en) | A data processing apparatus and method for performing vector operations | |
TWI595413B (zh) | 用以提供在遮罩暫存器與通用暫存器或記憶體間的轉換之指令及邏輯(二) | |
Reshadi et al. | An efficient retargetable framework for instruction-set simulation | |
EP4020178A1 (en) | Instructions to convert from fp16 to bf8 | |
EP4273694A2 (en) | Instructions to convert from fp16 to bf8 | |
CN107391099B (zh) | 一种资源预处理方法及装置 | |
Ritpurkar et al. | Synthesis and Simulation of a 32Bit MIPS RISC Processor using VHDL | |
Lyashko | Mastering Assembly Programming: From instruction set to kernel module with Intel processor | |
CN103930867A (zh) | 使用前缀对isa指令的标志非修改扩展 | |
Scheipel et al. | A Hardware/Software Concept for Partial Logic Updates of Embedded Soft Processors at Runtime | |
US9141498B2 (en) | Method for verification of reconfigurable processor | |
Gan et al. | A simulator support for LSI logic ZSP400 instruction set | |
US7039792B1 (en) | Method and system for implementing a floating point compare using recorded flags | |
Thampi | Udis86: Disassembler Library for x86 and x86-64 | |
EP4398098A2 (en) | Instructions to convert from fp16 to bf8 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20131023 |