CN112527392A - 一种静态翻译和静态桥接的安卓模拟器指令翻译方法 - Google Patents

一种静态翻译和静态桥接的安卓模拟器指令翻译方法 Download PDF

Info

Publication number
CN112527392A
CN112527392A CN202011447604.2A CN202011447604A CN112527392A CN 112527392 A CN112527392 A CN 112527392A CN 202011447604 A CN202011447604 A CN 202011447604A CN 112527392 A CN112527392 A CN 112527392A
Authority
CN
China
Prior art keywords
translation
static
arm64
api
opcodes
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.)
Withdrawn
Application number
CN202011447604.2A
Other languages
English (en)
Inventor
刘柏江
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Chengdu Yunyuzi Network Technology Co ltd
Original Assignee
Chengdu Yunyuzi Network Technology Co ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Chengdu Yunyuzi Network Technology Co ltd filed Critical Chengdu Yunyuzi Network Technology Co ltd
Priority to CN202011447604.2A priority Critical patent/CN112527392A/zh
Publication of CN112527392A publication Critical patent/CN112527392A/zh
Withdrawn legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/3017Runtime instruction translation, e.g. macros
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30025Format conversion instructions, e.g. Floating-Point to Integer, decimal conversion

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本发明公开一种静态翻译和静态桥接的安卓模拟器指令翻译方法,包括以下步骤:步骤10、指令翻译;步骤20、API翻译;步骤30、数据集成;步骤40、格式转码。本发明能方便的将ARM64‑ELF翻译为X64‑ELF。

Description

一种静态翻译和静态桥接的安卓模拟器指令翻译方法
技术领域
本发明属于软件安全领域,具体涉及一种静态翻译和静态桥接的安卓模拟器指令翻译方法。
背景技术
当前商用的安卓模拟器指令翻译器有两个,一个是Intel Houdini,一个是GoogleNDK-Translation。Intel Houdini是目前市面上所有安卓模拟器实现ARM/ARM64支持的基础,相对比较成熟,但是已经停止了更新维护。Google NDK-Translation只支持ARM,稳定性不太好,仅用于开发环境的测试。因此需要一款设计,能方便的将ARM64-ELF翻译为X64-ELF。
发明内容
本发明所要解决的技术问题便是针对上述现有技术的不足,提供一种静态翻译和静态桥接的安卓模拟器指令翻译方法,能方便的将ARM64-ELF翻译为X64-ELF。
本发明所采用的技术方案是:一种静态翻译和静态桥接的安卓模拟器指令翻译方法,包括以下步骤:
步骤10、指令翻译:利用LLVM Parser解析ARM64 ELF,得到ARM64 Opcodes,将得到的ARM64 Opcodes翻译编码为X64 Opcodes,得到静态翻译数据编码;
步骤20、API翻译:解析目标ARM64 ELF引入的外部API函数,利用Clang编译器得到对应API函数的调用约定,生成对应API函数的本地调用桥接,得到静态API Bridge;
步骤30、数据集成:将步骤10中得到的静态翻译数据编码和步骤20中得到的静态API Bridge生成纯c源代码,通过编译器将生成的纯c源代码编译为目标平台的ARM64可执行文件;
步骤40、格式转码:将步骤30中得到的ARM64可执行文件的相关字段修改为X64平台要求的X64可执行文件的相关字段,得到X64 ELF,即完成ARM64ELF到X64 ELF的格式转码。
其中一个实施例中,步骤10中,得到的ARM64 Opcodes包括翻译指令和软件指令。
其中一个实施例中,步骤10中,如得到的ARM64 Opcodes为翻译指令,通过Unicorn集成的Qemu JIT将其翻译为X64 Opcodes片段,提取该X64Opcodes片段并编码保存。
其中一个实施例中,步骤10中,如得到的ARM64 Opcodes为软件指令,将该软件指令使用自定义的编码进行保存。
其中一个实施例中,步骤20中,所述生成对应API函数的本地调用桥接,具体如下:
将原始ARM64的虚拟机上下文的寄存器参数翻译为API需要的参数调用方式。
其中一个实施例中,所述寄存器参数翻译方式具体为:
将寄存器的X0至X7填充为参数1至8。
其中一个实施例中,步骤30中,所述的编译器为NDK Clang。
其中一个实施例中,步骤40中,得到的X64 ELF为在安卓模拟器中使用的X64 EXE可执行文件或适用于安卓APP的X64 Native Bridge动态库。
本发明的有益效果在于:
1、提前将ARM64翻译为X64指令片段,执行效率高;
2、提前做完静态翻译和API桥接,目标平台运行时设计相对简单。
附图说明
图1为本发明指令翻译原理图。
具体实施方式
下面将结合附图及具体实施例对本发明作进一步详细说明。
如图1所示,本发明公开了一种静态翻译和静态桥接的安卓模拟器指令翻译方法,包括以下步骤:
步骤10、指令翻译:利用LLVM Parser解析ARM64 ELF,得到ARM64 Opcodes,将得到的ARM64 Opcodes翻译编码为X64 Opcodes,得到静态翻译数据编码;
步骤20、API翻译:解析目标ARM64 ELF引入的外部API函数,利用Clang编译器得到对应API函数的调用约定,生成对应API函数的本地调用桥接,得到静态API Bridge;
步骤30、数据集成:将步骤10中得到的静态翻译数据编码和步骤20中得到的静态API Bridge生成纯c源代码,通过编译器将生成的纯c源代码编译为目标平台的ARM64可执行文件;
步骤40、格式转码:将步骤30中得到的ARM64可执行文件的相关字段修改为X64平台要求的X64可执行文件的相关字段,得到X64 ELF,即完成ARM64ELF到X64 ELF的格式转码。
本实施例中,步骤10中,得到的ARM64 Opcodes包括翻译指令和软件指令。
本实施例中,步骤10中,如得到的ARM64 Opcodes为翻译指令,通过Unicorn集成的Qemu JIT将其翻译为X64 Opcodes片段,提取该X64 Opcodes片段并编码保存。
其中一个实施例中,步骤10中,如得到的ARM64 Opcodes为软件指令,将该软件指令使用自定义的编码进行保存。
本实施例中,步骤20中,所述生成对应API函数的本地调用桥接,具体如下:
将原始ARM64的虚拟机上下文的寄存器参数翻译为API需要的参数调用方式。
本实施例中,所述寄存器参数翻译方式具体为:
将寄存器的X0至X7填充为参数1至8。
本实施例中,步骤30中,所述的编译器为NDK Clang。
本实施例中,步骤40中,得到的X64 ELF为在安卓模拟器中使用的X64 EXE可执行文件或适用于安卓APP的X64 Native Bridge动态库。
本发明所述的安卓模拟器指运行在桌面电脑的安卓操作系统,不同于手机的安卓操作系统,它运行的架构是x64;所述的指令翻译器指将一种架构的指令等价翻译成另一个架构的指令,比如将适用于手机arm64的指令翻译成适用于桌面电脑的x64指令;所述的静态翻译指在运行程序之前完成指令的跨架构翻译;所述的静态桥接指在运行程序之前完成系统运行时API的跨架构桥接;所述的动态翻译指在运行程序的时候才完成指令的跨架构翻译;所述的API指Application Programming Interface,应用程序接口是一些预先定义的函数,或指软件系统不同组成部分衔接的约定;所述的Unicorn为一个基于qemu实现的虚拟cpu;所述的Qemu为一个纯软件实现的多架构模拟器;所述的ELF为Linux系列操作系统的可执行文件格式,包括Android也使用该格式;所述的ARM为ARM公司设计的指令集,手机几乎都是这种架构,支持arm/arm64两种模式;所述的X64为Intel/AMD公司设计的指令集,桌面电脑几乎都是这种架构;所述的Clang是一个C语言、C++、Objective-C语言的轻量级编译器。
本发明所述的翻译指令如add或sub,利用Qemu JIT翻译为x64执行。所述的软件指令包括短点指令、结束指令和PC依赖指令;所述的断点指令如bkpt#8;所述的结束指令如ret;所述的PC依赖指令如bl、adr或adrp。
目前安卓手机支持的ELF可执行文件是ARM/ARM64架构,安卓模拟器支持的ELF可执行文件是X86/X64架构。为了让ARM64架构的ELF运行在X64架构的安卓模拟器上,需要做静态翻译,也即将ARM64 ELF翻译为X64 ELF。
本发明中所述的软件指令可分为断点指令、结束指令、PC依赖指令。
ARM64 ELF与X64 ELF本质上都是ELF可执行文件格式,不同之处在于最终运行的体系架构不一样。这个体现在ELF格式中就是文件头描述信息的不同,因此只需要将ARM64相关的字段修改为X64平台要求的字段就可以实现ARM64-X64的ELF格式转码。
本方法可应用于安卓模拟器支持运行手机版本的应用和游戏。同时,也可以应用于安卓云计算用于支持手机版本的应用和游戏云化。
以上所述实施例仅表达了本发明的具体实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。

Claims (8)

1.一种静态翻译和静态桥接的安卓模拟器指令翻译方法,其特征在于,包括以下步骤:
步骤10、指令翻译:利用LLVM Parser解析ARM64 ELF,得到ARM64 Opcodes,将得到的ARM64 Opcodes翻译编码为X64 Opcodes,得到静态翻译数据编码;
步骤20、API翻译:解析目标ARM64 ELF引入的外部API函数,利用Clang编译器得到对应API函数的调用约定,生成对应API函数的本地调用桥接,得到静态API Bridge;
步骤30、数据集成:将步骤10中得到的静态翻译数据编码和步骤20中得到的静态APIBridge生成纯c源代码,通过编译器将生成的纯c源代码编译为目标平台的ARM64可执行文件;
步骤40、格式转码:将步骤30中得到的ARM64可执行文件的相关字段修改为X64平台要求的X64可执行文件的相关字段,得到X64 ELF,即完成ARM64 ELF到X64 ELF的格式转码。
2.根据权利要求1所述的一种静态翻译和静态桥接的安卓模拟器指令翻译方法,其特征在于,步骤10中,得到的ARM64 Opcodes包括翻译指令和软件指令。
3.根据权利要求2所述的一种静态翻译和静态桥接的安卓模拟器指令翻译方法,其特征在于,步骤10中,如得到的ARM64 Opcodes为翻译指令,通过Unicorn集成的Qemu JIT将其翻译为X64 Opcodes片段,提取该X64 Opcodes片段并编码保存。
4.根据权利要求2所述的一种静态翻译和静态桥接的安卓模拟器指令翻译方法,其特征在于,步骤10中,如得到的ARM64 Opcodes为软件指令,将该软件指令使用自定义的编码进行保存。
5.根据权利要求1所述的一种静态翻译和静态桥接的安卓模拟器指令翻译方法,其特征在于,步骤20中,所述生成对应API函数的本地调用桥接,具体如下:
将原始ARM64的虚拟机上下文的寄存器参数翻译为API需要的参数调用方式。
6.根据权利要求5所述的一种静态翻译和静态桥接的安卓模拟器指令翻译方法,其特征在于,所述寄存器参数翻译方式具体为:
将寄存器的X0至X7填充为参数1至8。
7.根据权利要求1所述的一种静态翻译和静态桥接的安卓模拟器指令翻译方法,其特征在于,步骤30中,所述的编译器为NDK Clang。
8.根据权利要求1所述的一种静态翻译和静态桥接的安卓模拟器指令翻译方法,其特征在于,步骤40中,得到的X64 ELF为在安卓模拟器中使用的X64 EXE可执行文件或适用于安卓APP的X64 Native Bridge动态库。
CN202011447604.2A 2020-12-11 2020-12-11 一种静态翻译和静态桥接的安卓模拟器指令翻译方法 Withdrawn CN112527392A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011447604.2A CN112527392A (zh) 2020-12-11 2020-12-11 一种静态翻译和静态桥接的安卓模拟器指令翻译方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011447604.2A CN112527392A (zh) 2020-12-11 2020-12-11 一种静态翻译和静态桥接的安卓模拟器指令翻译方法

Publications (1)

Publication Number Publication Date
CN112527392A true CN112527392A (zh) 2021-03-19

Family

ID=74998558

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011447604.2A Withdrawn CN112527392A (zh) 2020-12-11 2020-12-11 一种静态翻译和静态桥接的安卓模拟器指令翻译方法

Country Status (1)

Country Link
CN (1) CN112527392A (zh)

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102364433A (zh) * 2011-06-24 2012-02-29 浙大网新科技股份有限公司 在ARM处理器上实现Wine构建工具移植的方法
CN105608346A (zh) * 2015-12-25 2016-05-25 北京奇虎科技有限公司 基于arm指令虚拟化的elf文件保护方法及系统
CN106663019A (zh) * 2014-05-13 2017-05-10 甲骨文国际公司 处理值类型

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102364433A (zh) * 2011-06-24 2012-02-29 浙大网新科技股份有限公司 在ARM处理器上实现Wine构建工具移植的方法
CN106663019A (zh) * 2014-05-13 2017-05-10 甲骨文国际公司 处理值类型
CN105608346A (zh) * 2015-12-25 2016-05-25 北京奇虎科技有限公司 基于arm指令虚拟化的elf文件保护方法及系统

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
贾少波: "基于X86 平台的ARM 指令集模拟器的设计", 《电子设计工程》 *
马湘宁: "二进制翻译关键技术研究", 《中国博士学位论文全文数据库 信息科技辑》 *

Similar Documents

Publication Publication Date Title
US9766867B2 (en) Systems and methods for improving performance of mobile applications
CN107077337B (zh) 用于执行根据两个指令集架构编译的应用编码的系统和方法
JP5415557B2 (ja) デバッギングのためのユーザ・スクリプト・コードの変換
Shen et al. LLBT: an LLVM-based static binary translator
Cifuentes et al. Binary translation: Static, dynamic, retargetable?
CN111381852A (zh) 基于Flutter的应用动态更新方法、装置、存储介质及电子设备
Spies et al. An evaluation of webassembly in non-web environments
US20190004774A1 (en) Automated source code adaption to inject features between platform versions
CN114185551B (zh) 小程序的编译方法、小程序的运行方法及装置、存储介质
Engelke et al. Instrew: Leveraging LLVM for high performance dynamic binary instrumentation
WO2022237098A1 (zh) 一种异构程序执行方法、装置、计算设备及可读存储介质
Franz Adaptive compression of syntax trees and iterative dynamic code optimization: Two basic technologies for mobile object systems
US20030110478A1 (en) Portable run-time code synthesis in a caching dynamic translator
Hwang et al. DisIRer: Converting a retargetable compiler into a multiplatform binary translator
US20120284701A1 (en) Efficient conditional flow control compilation
Auler et al. Handling IoT platform heterogeneity with COISA, a compact OpenISA virtual platform
CN113238761A (zh) 跨平台软件开发方法、装置、电子设备及存储介质
EP3752914B1 (en) Techniques for native runtime of hypertext markup language graphics content
CN112052047A (zh) 一种指令处理方法、终端及存储介质
CN112527392A (zh) 一种静态翻译和静态桥接的安卓模拟器指令翻译方法
KR101349631B1 (ko) 중간 언어 변환 방법과 그를 위한 시스템 및 컴퓨터로 읽을 수 있는 기록매체
McNamara Rust in Action
Klehm et al. A comparative analysis between Lua interpreter variants compiled to WASM, JavaScript and native
CN115545136B (zh) 一种在国产处理器平台固件进行raid卡管理的方法
Son et al. Design and implementation of the smart virtual machine on iOS platform for the mobile game portability

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
WW01 Invention patent application withdrawn after publication
WW01 Invention patent application withdrawn after publication

Application publication date: 20210319