SlideShare uma empresa Scribd logo
1 de 55
Baixar para ler offline
How to Implement A Simple
Dalvik Virtual Machine
Agenda
• Java Virtual Machine (JVM)
– Java Virtual Machine and its instructions
– Implement a Simple JVM

• Dalvik Virtual Machine (DVM)
– Dalvik Virtual Machine and its instructions
– Implement a Simple DVM

• References
Java Virtual Machine
Java Virtual Machine Overview
• Java Virtual Machine
– JVM Model
– Java ByteCode
– Java ByteCode instructions

• How to make a Java VM
– A Simple Java Virtual Machine
– Experiment
Java Virtual Machine
• Stack-based (Last-In First-Out) Virtual Machine
• Computation in Stack
• Load Java ByteCode to execute program
Lines

Stack-based VM Pseudo
Code

0

POP 20

1

POP 7

2

ADD 20, 7, result

3

PUSH result

http://www.codeproject.com/Articles/461052/Stack-based-vs-Register-based-VirtualMachine-Arch
Java Source to ByteCode

http://javabook1.blogspot.tw/2013/07/introduction-to-java.html
JVM Model
• Local Variables:
• place the method
input parameters

• Operand Stack:
• Computation Area
• Put Instruction
Operands and Return
address

• Constant Pool
• Put Constant Data
Java ByteCode
• What is ByteCode ?
– also known as p-code (portable code), is a form of
instruction set designed for efficient execution by
a software interpreter.
An Java Addition Example a = 20, b = 30
C-pseudo

X86 ASM

Java ByteCode
(Human-syntax)

Java ByteCode
binary

int add
mov eax, byte [ebp-4]
(int a, int b ) mov edx, byte [ebp-8]
{
return a+b; add eax, edx

iload_1

0x1a

iload_2

0x1b

iadd

0x60

}

ireturn

0x3e

ret
A Java Addition Example
Local Variables

20

30
Stack

<<init>>

C-pseudo

An Addition
Example
a = 20, b = 30

Java ByteCode
(Human-syntax)

void add
iload_1
(int a, int b ) iload_2
{
iadd
b = a+b;
}
istore_2

Local Variables

Local Variables

Local Variables

Local Variables

1

20

20

20

20

2

30

30

30

50

Stack

Stack

Stack

Stack

20

20

50

50

iadd

istore_2

0

30

iload_1

iload_2
More Java ByteCode Example
class Example3c {
public static void addAndPrint() {
double result = addTwoTypes
(1, 88.88);
System.out.println(result);
}
public static double addTwoTypes
(int i, double d) {
return i + d;
}
}

Inside the Java Virtual Machine, 2000, Bill Venners
Java Bytecode instructions (Partials)
Mnemonic

iadd
isub
idiv

imul
irem

Opcode

Stack

0x60

Pop value1, Pop value2
result = value1 + value2
Push result

0x64

Pop value1, Pop value2
result = value1 - value2
Push result

0x6C

Pop value1, Pop value2
result = value2 / value1
Push result

0x68

Pop value1, Pop value2
result = value1 * value2
Push result

0x70

Pop value1, Pop value2
result = value2 % value1
Push result

http://en.wikipedia.org/wiki/Java_bytecode_instruction_listings
How to make a Java Virtual Machine
• At least to know about Java Class File
– Wikipedia
• http://en.wikipedia.org/wiki/Java_bytecode
• http://en.wikipedia.org/wiki/Java_class_file

– the Java Specification
• http://docs.oracle.com/javase/6/docs/index.html
Java Class File
Java Class File Structure

Magic Number:

0xCAFEBABE

Version of Class File Format:

the minor and major versions of the class file

Constant Pool:

Pool of constants for the class

Access Flags:

for example whether the class is abstract, static,
etc.

This Class:

The name of the current class

Super Class:

The name of the super class

Interfaces:

Any interfaces in the class

Fields:

Any fields in the class

Methods:

Any methods in the class

Attributes:

Any attributes of the class (for example the name
of the sourcefile, etc.)
Java Class File
Structure
Download Simple JVM
• goo.gl/FA3fwx
Simple JVM Source Code Structure
Simple JVM
Constant Pool

Interface Pool

Stack

Method Pool

VM Engine ( Bytecode Loader)
Class File Parser
Compile Simple JVM
Test Foo

Java Foo

Simple JVM Foo
Simple JVM
Instruction Table :
simple_jvm_bytecodes.c
iadd : simple_jvm_bytecodes.c

iadd

0x60

Pop value1, Pop value2
result = value1 + value2
Push result
imul: simple_jvm_bytecodes.c

imul

0x68

Pop value1, Pop value2
result = value1 * value2
Push result
Experiment: add irem instruction into
Simple JVM
irem

0x70

goo.gl/xIMuym

Execution Result:

Pop value1, Pop value2
result = value2 % value1
Push result
Dalvik Virtual Machine
Dalvik Virtual Machine Overview
•
•
•
•

Java Translation for JVM and DVM
Hello World on Dalvik VM
DVM ByteCode
DVM ByteCode Interpreter Generation on
Android Open Source
• Dex File Header
• An Simple Dalvik Virtual Machine
Java Translation for JVM and DVM

http://www.codeproject.com/Articles/461052/
Stack-based-vs-Register-based-VirtualMachine-Arch
Hello World on Dalvik VM Roadmap
Build Environment
Setup

JDK Installation

Download Android
Open Source

Compile Dalvik VM
x86 host

Build Dalvik VM

Produce

Compile Hello
World

Dalvik x86

Foo.jar

Compile Hello World

Run
Android Open Source Build Setup
• Ubuntu 12.04
– Virtual Box

• sudo apt-get install git gnupg flex bison gperf build-essential zip
curl libc6-dev libncurses5-dev:i386 x11proto-core-dev libx11dev:i386 libreadline6-dev:i386 libgl1-mesa-dri:i386 libgl1-mesadev g++-multilib mingw32 tofrodos python-markdown libxml2utils xsltproc zlib1g-dev:i386
• 如果發生衝突使用 libgl1-mesa-glx:i386

Android Open Source Initializing a Build Environment
http://source.android.com/source/initializing.html
Build Setup Result
JDK Installation on Ubuntu
• sudo add-apt-repository ppa:webupd8team/java
• sudo apt-get update
• sudo apt-get install oracle-java6-installer

Android Open Source Initializing a Build Environment
http://source.android.com/source/initializing.html
Download Android Open Source(1)
•
•
•
•

cd ~
mkdir android_source
cd android_source
mkdir bin

• curl http://commondatastorage.googleapis.com/
git-repo-downloads/repo > repo

• chmod a+x repo
• cd ..
Download Android Open Source(2)
• Check android release Tag
Download Android Open Source(3)
• mkdir test & cd test
• mkdir bin & cd bin
• curl http://commondatastorage.googleapis.com/gitrepo-downloads/repo > repo
• chmod 777 repo
• cd ..
• mkdir android-4.3_r1
• cd android-4.3_r1
• ../bin/repo init -u
https://android.googlesource.com/platform/manifest b android-4.3_r1
– Initial android-4.3_r1

• repo sync
– Download Android Open Source
Download Android Open Source Result

Repo Init

Repo Sync
Compile Dalvik VM x86
• source build/envsetup.sh
• lunch 2
• make dalvikvm dalvik-host core ext dexopt
framework android.policy services

make_dvm.sh
Compile Dalvik VM x86 Result
Setup DalvikVM x86
• mkdir -p dalvik-x86-android-4.3
• mkdir -p dalvik-x86-android-4.3/tmp/dalvik-cache
• cp -r android-4.3_r1/out/target/product/generic_x86/system/
dalvik-x86-android-4.3/system/
• cp -r android-4.3_r1/out/host/linux-x86/bin dalvik-x86-android4.3/
• cp -r android-4.3_r1/out/host/linux-x86/lib dalvik-x86-android4.3/
• cp -r android-4.3_r1/out/host/linux-x86/usr dalvik-x86-android4.3/system/
Hello World on Dalvik VM Roadmap
Build Environment
Setup

JDK Installation

Download Android
Open Source

Compile Dalvik VM
x86 host

Build Dalvik VM

Produce

Compile Hello
World

Dalvik x86

Foo.jar

Compile Hello World

Run
Download ADT (Android Development Tools ) for
Compile Hello World

http://developer.android.com/sdk/index.html#
download
Compile Hello World to DEX
Foo.java

javac Foo.java

javac
Foo.class

dx --dex –output=foo.jar Foo.class

Classes.dex

dx

foo.jar
Hello World
• Foo1.java
Foo1 {
public static void main ( String args[] ) {
System.out.println(“Hello World”);
}

}

• javac Foo1.java
• dx --dex --output=foo1.jar Foo1.class
Run Hello World on DalvikVM x86

run_dvm2.sh

$@ 是 bash script 的 parameters
./run_dvm2.sh –cp foo1.jar Foo
Dalvik VM and ByteCode
• Register-based, 32bits
• Instructions Fetch Unit : 16 bits
– Byte code store as binary

• Constant pools
– String, Type, Field, Method, Class

• Human-syntax and mnemonics
Insturction Suffix
-wide(64bits OpCodes)

-char

-boolean

-short

-byte

-int

-long

-float

-object

-string

-class

-void
Dalvik ByteCode Human-syntax
• Example "move-wide/from16 vAA, vBBBB":
– Opcode : “move" move a register's value).
– "wide" is the name suffix
• it operates on wide (64 bit) data.

– "from16" is the opcode suffix
• 16-bit register reference as a source.

– "vAA" is the destination register
• v0 – v255.

– "vBBBB" is the source register
• v0 – v65535.
Dalvik ByteCode Example
OpCode

suffix1

Suffix2

destination

source

move

wide

from16

vAA

vBBBB

4

v6

int #0

double-to-int

v0

v0

invoke-virtual

method@0002

{v3,v4}

const-string

string@0005

v4

mul-int

v3

v0,v1

v2

v2,v3

const

add-int

2addr
DVM ByteCode Interpreter
Generation on AOSP
• How to generate the InterpC-portable.cpp
– rebuild.sh TARGET_ARCH=portable
– parse Makefile-mterp
– gen-mterp.py TARGET_ARCH=portable
– parse config-portable
– concatenate cpp files to one files
• InterpC-portable.cpp
Dalvik Mterp Generation flow
Rebuild.sh

Invoke makefile

Makefile-mterp

TARGET_ARCH_EXT=portable

gen-mterp.py

parse config-portable
Concatenate files

InterpC-portable.cpp
Dex Header

http://www.strazzere.com/blog/2008/11/updated-dalvik-vm-dex-file-format/
Dex Translation Example

SymDroid: Symbolic Execution for Dalvik Bytecode- Technical Report CS-TR-5022, July 2012
Jinseong Jeon, Kristopher K. Micinski, Je rey S. Foster
Department of Computer Science, University of Maryland, College Park
Dalvik ByteCode Example 2
A Simple Dalvik Virtual Machine
Register Bank
v0 ~ v65535

Program
Context

VM Stat / PC

Heap

VM Engine
DEX Parser
Simple DVM
Instruction Table :
simple_dvm_bytecodes.c
add-int implementation
An Simple Dalvik VM Experiment
goo.gl/J5VFQV

1. make_simple_dvm
2. simple_dvm Foo1.dex
References
• Android Open Source
– http://source.android.com/index.html

• Android XRef
– http://androidxref.com/

• Java ByteCodes Fundamentals
– http://arhipov.blogspot.tw/2011/01/java-bytecodefundamentals.html

• Java ByteCode Instruction listings
– http://en.wikipedia.org/wiki/Java_bytecode_instructi
on_listings

• Dalvik Wiki
– http://en.wikipedia.org/wiki/Dalvik_(software)

Mais conteúdo relacionado

Mais procurados

Android Storage - Vold
Android Storage - VoldAndroid Storage - Vold
Android Storage - VoldWilliam Lee
 
BKK16-315 Graphics Stack Update
BKK16-315 Graphics Stack UpdateBKK16-315 Graphics Stack Update
BKK16-315 Graphics Stack UpdateLinaro
 
Android device driver structure introduction
Android device driver structure introductionAndroid device driver structure introduction
Android device driver structure introductionWilliam Liang
 
Embedded Android Workshop with Pie
Embedded Android Workshop with PieEmbedded Android Workshop with Pie
Embedded Android Workshop with PieOpersys inc.
 
Using and Customizing the Android Framework / part 4 of Embedded Android Work...
Using and Customizing the Android Framework / part 4 of Embedded Android Work...Using and Customizing the Android Framework / part 4 of Embedded Android Work...
Using and Customizing the Android Framework / part 4 of Embedded Android Work...Opersys inc.
 
Learning AOSP - Android Booting Process
Learning AOSP - Android Booting ProcessLearning AOSP - Android Booting Process
Learning AOSP - Android Booting ProcessNanik Tolaram
 
A deep dive into Android OpenSource Project(AOSP)
A deep dive into Android OpenSource Project(AOSP)A deep dive into Android OpenSource Project(AOSP)
A deep dive into Android OpenSource Project(AOSP)Siji Sunny
 
Using the Presentation API and external screens on Android
Using the Presentation API and external screens on AndroidUsing the Presentation API and external screens on Android
Using the Presentation API and external screens on AndroidXavier Hallade
 
Android Boot Time Optimization
Android Boot Time OptimizationAndroid Boot Time Optimization
Android Boot Time OptimizationKan-Ru Chen
 
LLVM Backend Porting
LLVM Backend PortingLLVM Backend Porting
LLVM Backend PortingShiva Chen
 

Mais procurados (20)

Android Storage - Vold
Android Storage - VoldAndroid Storage - Vold
Android Storage - Vold
 
Embedded Android : System Development - Part II (Linux device drivers)
Embedded Android : System Development - Part II (Linux device drivers)Embedded Android : System Development - Part II (Linux device drivers)
Embedded Android : System Development - Part II (Linux device drivers)
 
BKK16-315 Graphics Stack Update
BKK16-315 Graphics Stack UpdateBKK16-315 Graphics Stack Update
BKK16-315 Graphics Stack Update
 
Automotive android
Automotive androidAutomotive android
Automotive android
 
Android Things : Building Embedded Devices
Android Things : Building Embedded DevicesAndroid Things : Building Embedded Devices
Android Things : Building Embedded Devices
 
Android device driver structure introduction
Android device driver structure introductionAndroid device driver structure introduction
Android device driver structure introduction
 
Block Drivers
Block DriversBlock Drivers
Block Drivers
 
Embedded Android Workshop with Pie
Embedded Android Workshop with PieEmbedded Android Workshop with Pie
Embedded Android Workshop with Pie
 
Init of Android
Init of AndroidInit of Android
Init of Android
 
Using and Customizing the Android Framework / part 4 of Embedded Android Work...
Using and Customizing the Android Framework / part 4 of Embedded Android Work...Using and Customizing the Android Framework / part 4 of Embedded Android Work...
Using and Customizing the Android Framework / part 4 of Embedded Android Work...
 
Android local sockets in native code
Android local sockets in native code Android local sockets in native code
Android local sockets in native code
 
Learning AOSP - Android Booting Process
Learning AOSP - Android Booting ProcessLearning AOSP - Android Booting Process
Learning AOSP - Android Booting Process
 
A deep dive into Android OpenSource Project(AOSP)
A deep dive into Android OpenSource Project(AOSP)A deep dive into Android OpenSource Project(AOSP)
A deep dive into Android OpenSource Project(AOSP)
 
Using the Presentation API and external screens on Android
Using the Presentation API and external screens on AndroidUsing the Presentation API and external screens on Android
Using the Presentation API and external screens on Android
 
Binder: Android IPC
Binder: Android IPCBinder: Android IPC
Binder: Android IPC
 
Linux Systems: Getting started with setting up an Embedded platform
Linux Systems: Getting started with setting up an Embedded platformLinux Systems: Getting started with setting up an Embedded platform
Linux Systems: Getting started with setting up an Embedded platform
 
Android Boot Time Optimization
Android Boot Time OptimizationAndroid Boot Time Optimization
Android Boot Time Optimization
 
LLVM Backend Porting
LLVM Backend PortingLLVM Backend Porting
LLVM Backend Porting
 
Embedded Android : System Development - Part III
Embedded Android : System Development - Part IIIEmbedded Android : System Development - Part III
Embedded Android : System Development - Part III
 
Embedded Android : System Development - Part IV (Android System Services)
Embedded Android : System Development - Part IV (Android System Services)Embedded Android : System Development - Part IV (Android System Services)
Embedded Android : System Development - Part IV (Android System Services)
 

Destaque

Inside Android's Dalvik VM - NEJUG Nov 2011
Inside Android's Dalvik VM - NEJUG Nov 2011Inside Android's Dalvik VM - NEJUG Nov 2011
Inside Android's Dalvik VM - NEJUG Nov 2011Doug Hawkins
 
Google ART (Android RunTime)
Google ART (Android RunTime)Google ART (Android RunTime)
Google ART (Android RunTime)Niraj Solanke
 
How to build a virtual machine
How to build a virtual machineHow to build a virtual machine
How to build a virtual machineTerence Parr
 
Understanding the Dalvik bytecode with the Dedexer tool
Understanding the Dalvik bytecode with the Dedexer toolUnderstanding the Dalvik bytecode with the Dedexer tool
Understanding the Dalvik bytecode with the Dedexer toolGabor Paller
 
Embedded Android Workshop with Lollipop
Embedded Android Workshop with LollipopEmbedded Android Workshop with Lollipop
Embedded Android Workshop with LollipopOpersys inc.
 
Evoluzione dei malware in ambiente Android: dalle metodologie di infezione al...
Evoluzione dei malware in ambiente Android: dalle metodologie di infezione al...Evoluzione dei malware in ambiente Android: dalle metodologie di infezione al...
Evoluzione dei malware in ambiente Android: dalle metodologie di infezione al...Gianfranco Tonello
 
Tutto quello che avreste voluto sapere sui malware android
Tutto quello che avreste voluto sapere sui malware androidTutto quello che avreste voluto sapere sui malware android
Tutto quello che avreste voluto sapere sui malware androidGianfranco Tonello
 
HKG15-300: Art's Quick Compiler: An unofficial overview
HKG15-300: Art's Quick Compiler: An unofficial overviewHKG15-300: Art's Quick Compiler: An unofficial overview
HKG15-300: Art's Quick Compiler: An unofficial overviewLinaro
 
Dalvik Vm &amp; Jit
Dalvik Vm &amp; JitDalvik Vm &amp; Jit
Dalvik Vm &amp; JitAnkit Somani
 
Scacco matto ai crytpo malware (milano)
Scacco matto ai crytpo malware (milano)Scacco matto ai crytpo malware (milano)
Scacco matto ai crytpo malware (milano)Gianfranco Tonello
 
Introduction To Android
Introduction To AndroidIntroduction To Android
Introduction To Androidma-polimi
 
Antlr Conference Drools & Hibernate
Antlr Conference   Drools & HibernateAntlr Conference   Drools & Hibernate
Antlr Conference Drools & HibernateAlexandre Porcelli
 
BKK16-302: Android Optimizing Compiler: New Member Assimilation Guide
BKK16-302: Android Optimizing Compiler: New Member Assimilation GuideBKK16-302: Android Optimizing Compiler: New Member Assimilation Guide
BKK16-302: Android Optimizing Compiler: New Member Assimilation GuideLinaro
 
Java Virtual Machine - Internal Architecture
Java Virtual Machine - Internal ArchitectureJava Virtual Machine - Internal Architecture
Java Virtual Machine - Internal Architecturesubnesh
 
Algoritmo probabilistico di tipo montecarlo per il list decoding
Algoritmo probabilistico di tipo montecarlo per il list decodingAlgoritmo probabilistico di tipo montecarlo per il list decoding
Algoritmo probabilistico di tipo montecarlo per il list decodingdanielenicassio
 

Destaque (20)

Inside Android's Dalvik VM - NEJUG Nov 2011
Inside Android's Dalvik VM - NEJUG Nov 2011Inside Android's Dalvik VM - NEJUG Nov 2011
Inside Android's Dalvik VM - NEJUG Nov 2011
 
Google ART (Android RunTime)
Google ART (Android RunTime)Google ART (Android RunTime)
Google ART (Android RunTime)
 
How to build a virtual machine
How to build a virtual machineHow to build a virtual machine
How to build a virtual machine
 
Understanding the Dalvik bytecode with the Dedexer tool
Understanding the Dalvik bytecode with the Dedexer toolUnderstanding the Dalvik bytecode with the Dedexer tool
Understanding the Dalvik bytecode with the Dedexer tool
 
Embedded Android Workshop with Lollipop
Embedded Android Workshop with LollipopEmbedded Android Workshop with Lollipop
Embedded Android Workshop with Lollipop
 
Evoluzione dei malware in ambiente Android: dalle metodologie di infezione al...
Evoluzione dei malware in ambiente Android: dalle metodologie di infezione al...Evoluzione dei malware in ambiente Android: dalle metodologie di infezione al...
Evoluzione dei malware in ambiente Android: dalle metodologie di infezione al...
 
Tutto quello che avreste voluto sapere sui malware android
Tutto quello che avreste voluto sapere sui malware androidTutto quello che avreste voluto sapere sui malware android
Tutto quello che avreste voluto sapere sui malware android
 
Security testing in mobile applications
Security testing in mobile applicationsSecurity testing in mobile applications
Security testing in mobile applications
 
HKG15-300: Art's Quick Compiler: An unofficial overview
HKG15-300: Art's Quick Compiler: An unofficial overviewHKG15-300: Art's Quick Compiler: An unofficial overview
HKG15-300: Art's Quick Compiler: An unofficial overview
 
Jvm internals
Jvm internalsJvm internals
Jvm internals
 
Dalvik Vm &amp; Jit
Dalvik Vm &amp; JitDalvik Vm &amp; Jit
Dalvik Vm &amp; Jit
 
Scacco matto ai crytpo malware (milano)
Scacco matto ai crytpo malware (milano)Scacco matto ai crytpo malware (milano)
Scacco matto ai crytpo malware (milano)
 
Introduction To Android
Introduction To AndroidIntroduction To Android
Introduction To Android
 
Dalvik jit
Dalvik jitDalvik jit
Dalvik jit
 
3. jvm
3. jvm3. jvm
3. jvm
 
Antlr Conference Drools & Hibernate
Antlr Conference   Drools & HibernateAntlr Conference   Drools & Hibernate
Antlr Conference Drools & Hibernate
 
BKK16-302: Android Optimizing Compiler: New Member Assimilation Guide
BKK16-302: Android Optimizing Compiler: New Member Assimilation GuideBKK16-302: Android Optimizing Compiler: New Member Assimilation Guide
BKK16-302: Android Optimizing Compiler: New Member Assimilation Guide
 
Java Virtual Machine - Internal Architecture
Java Virtual Machine - Internal ArchitectureJava Virtual Machine - Internal Architecture
Java Virtual Machine - Internal Architecture
 
Android JNI
Android JNIAndroid JNI
Android JNI
 
Algoritmo probabilistico di tipo montecarlo per il list decoding
Algoritmo probabilistico di tipo montecarlo per il list decodingAlgoritmo probabilistico di tipo montecarlo per il list decoding
Algoritmo probabilistico di tipo montecarlo per il list decoding
 

Semelhante a How to implement a simple dalvik virtual machine

JavaOne 2011 - JVM Bytecode for Dummies
JavaOne 2011 - JVM Bytecode for DummiesJavaOne 2011 - JVM Bytecode for Dummies
JavaOne 2011 - JVM Bytecode for DummiesCharles Nutter
 
The State of Managed Runtimes 2013, by Attila Szegedi
The State of Managed Runtimes 2013, by Attila SzegediThe State of Managed Runtimes 2013, by Attila Szegedi
The State of Managed Runtimes 2013, by Attila SzegediZeroTurnaround
 
Mastering Java Bytecode - JAX.de 2012
Mastering Java Bytecode - JAX.de 2012Mastering Java Bytecode - JAX.de 2012
Mastering Java Bytecode - JAX.de 2012Anton Arhipov
 
GOTO Night with Charles Nutter Slides
GOTO Night with Charles Nutter SlidesGOTO Night with Charles Nutter Slides
GOTO Night with Charles Nutter SlidesAlexandra Masterson
 
1 java programming- introduction
1  java programming- introduction1  java programming- introduction
1 java programming- introductionjyoti_lakhani
 
introduction to node.js
introduction to node.jsintroduction to node.js
introduction to node.jsorkaplan
 
Java Future S Ritter
Java Future S RitterJava Future S Ritter
Java Future S Rittercatherinewall
 
Dcjq node.js presentation
Dcjq node.js presentationDcjq node.js presentation
Dcjq node.js presentationasync_io
 
Dependencies Managers in C/C++. Using stdcpp 2014
Dependencies Managers in C/C++. Using stdcpp 2014Dependencies Managers in C/C++. Using stdcpp 2014
Dependencies Managers in C/C++. Using stdcpp 2014biicode
 
Docker 1 0 1 0 1: a Docker introduction, actualized for the stable release of...
Docker 1 0 1 0 1: a Docker introduction, actualized for the stable release of...Docker 1 0 1 0 1: a Docker introduction, actualized for the stable release of...
Docker 1 0 1 0 1: a Docker introduction, actualized for the stable release of...Jérôme Petazzoni
 
Raffaele Rialdi
Raffaele RialdiRaffaele Rialdi
Raffaele RialdiCodeFest
 
Using Smalltalk for controlling robotics systems
Using Smalltalk for controlling robotics systemsUsing Smalltalk for controlling robotics systems
Using Smalltalk for controlling robotics systemsSerge Stinckwich
 
Deploying WO on Windows
Deploying WO on WindowsDeploying WO on Windows
Deploying WO on WindowsWO Community
 

Semelhante a How to implement a simple dalvik virtual machine (20)

JavaOne 2011 - JVM Bytecode for Dummies
JavaOne 2011 - JVM Bytecode for DummiesJavaOne 2011 - JVM Bytecode for Dummies
JavaOne 2011 - JVM Bytecode for Dummies
 
The State of Managed Runtimes 2013, by Attila Szegedi
The State of Managed Runtimes 2013, by Attila SzegediThe State of Managed Runtimes 2013, by Attila Szegedi
The State of Managed Runtimes 2013, by Attila Szegedi
 
Mastering Java Bytecode - JAX.de 2012
Mastering Java Bytecode - JAX.de 2012Mastering Java Bytecode - JAX.de 2012
Mastering Java Bytecode - JAX.de 2012
 
Java goes wild, lesson 1
Java goes wild, lesson 1Java goes wild, lesson 1
Java goes wild, lesson 1
 
GOTO Night with Charles Nutter Slides
GOTO Night with Charles Nutter SlidesGOTO Night with Charles Nutter Slides
GOTO Night with Charles Nutter Slides
 
1 java programming- introduction
1  java programming- introduction1  java programming- introduction
1 java programming- introduction
 
introduction to node.js
introduction to node.jsintroduction to node.js
introduction to node.js
 
Java Future S Ritter
Java Future S RitterJava Future S Ritter
Java Future S Ritter
 
De Java 8 ate Java 14
De Java 8 ate Java 14De Java 8 ate Java 14
De Java 8 ate Java 14
 
Java platform
Java platformJava platform
Java platform
 
Dcjq node.js presentation
Dcjq node.js presentationDcjq node.js presentation
Dcjq node.js presentation
 
Dependencies Managers in C/C++. Using stdcpp 2014
Dependencies Managers in C/C++. Using stdcpp 2014Dependencies Managers in C/C++. Using stdcpp 2014
Dependencies Managers in C/C++. Using stdcpp 2014
 
Introduction to java programming part 1
Introduction to java programming   part 1Introduction to java programming   part 1
Introduction to java programming part 1
 
Ropython-windbg-python-extensions
Ropython-windbg-python-extensionsRopython-windbg-python-extensions
Ropython-windbg-python-extensions
 
Docker 1 0 1 0 1: a Docker introduction, actualized for the stable release of...
Docker 1 0 1 0 1: a Docker introduction, actualized for the stable release of...Docker 1 0 1 0 1: a Docker introduction, actualized for the stable release of...
Docker 1 0 1 0 1: a Docker introduction, actualized for the stable release of...
 
Mastering Java ByteCode
Mastering Java ByteCodeMastering Java ByteCode
Mastering Java ByteCode
 
Raffaele Rialdi
Raffaele RialdiRaffaele Rialdi
Raffaele Rialdi
 
Using Smalltalk for controlling robotics systems
Using Smalltalk for controlling robotics systemsUsing Smalltalk for controlling robotics systems
Using Smalltalk for controlling robotics systems
 
Deploying WO on Windows
Deploying WO on WindowsDeploying WO on Windows
Deploying WO on Windows
 
De Java 8 a Java 11 y 14
De Java 8 a Java 11 y 14De Java 8 a Java 11 y 14
De Java 8 a Java 11 y 14
 

Último

UX Conference on UX Research Trends in 2024
UX Conference on UX Research Trends in 2024UX Conference on UX Research Trends in 2024
UX Conference on UX Research Trends in 2024mikailaoh
 
Khushi sharma undergraduate portfolio...
Khushi sharma undergraduate portfolio...Khushi sharma undergraduate portfolio...
Khushi sharma undergraduate portfolio...khushisharma298853
 
How to use Ai for UX UI Design | ChatGPT
How to use Ai for UX UI Design | ChatGPTHow to use Ai for UX UI Design | ChatGPT
How to use Ai for UX UI Design | ChatGPTThink 360 Studio
 
Cold War Tensions Increase - 1945-1952.pptx
Cold War Tensions Increase - 1945-1952.pptxCold War Tensions Increase - 1945-1952.pptx
Cold War Tensions Increase - 1945-1952.pptxSamKuruvilla5
 
LRFD Bridge Design Specifications-AASHTO (2014).pdf
LRFD Bridge Design Specifications-AASHTO (2014).pdfLRFD Bridge Design Specifications-AASHTO (2014).pdf
LRFD Bridge Design Specifications-AASHTO (2014).pdfHctorFranciscoSnchez1
 
WCM Branding Agency | 210519 - Portfolio Review (F&B) -s.pptx
WCM Branding Agency | 210519 - Portfolio Review (F&B) -s.pptxWCM Branding Agency | 210519 - Portfolio Review (F&B) -s.pptx
WCM Branding Agency | 210519 - Portfolio Review (F&B) -s.pptxHasan S
 
Designing for privacy: 3 essential UX habits for product teams
Designing for privacy: 3 essential UX habits for product teamsDesigning for privacy: 3 essential UX habits for product teams
Designing for privacy: 3 essential UX habits for product teamsBlock Party
 
Production of Erythromycin microbiology.pptx
Production of Erythromycin microbiology.pptxProduction of Erythromycin microbiology.pptx
Production of Erythromycin microbiology.pptxb2kshani34
 
Design mental models for managing large-scale dbt projects. March 21, 2024 in...
Design mental models for managing large-scale dbt projects. March 21, 2024 in...Design mental models for managing large-scale dbt projects. March 21, 2024 in...
Design mental models for managing large-scale dbt projects. March 21, 2024 in...Ed Orozco
 
Introduce Trauma-Informed Design to Your Organization - CSUN ATC 2024
Introduce Trauma-Informed Design to Your Organization - CSUN ATC 2024Introduce Trauma-Informed Design to Your Organization - CSUN ATC 2024
Introduce Trauma-Informed Design to Your Organization - CSUN ATC 2024Ted Drake
 
Math Group 3 Presentation OLOLOLOLILOOLLOLOL
Math Group 3 Presentation OLOLOLOLILOOLLOLOLMath Group 3 Presentation OLOLOLOLILOOLLOLOL
Math Group 3 Presentation OLOLOLOLILOOLLOLOLkenzukiri
 
The future of UX design support tools - talk Paris March 2024
The future of UX design support tools - talk Paris March 2024The future of UX design support tools - talk Paris March 2024
The future of UX design support tools - talk Paris March 2024Alan Dix
 
Construction Documents Checklist before Construction
Construction Documents Checklist before ConstructionConstruction Documents Checklist before Construction
Construction Documents Checklist before ConstructionResDraft
 
High-Quality Faux Embroidery Services | Cre8iveSkill
High-Quality Faux Embroidery Services | Cre8iveSkillHigh-Quality Faux Embroidery Services | Cre8iveSkill
High-Quality Faux Embroidery Services | Cre8iveSkillCre8iveskill
 
Embroidery design from embroidery magazine
Embroidery design from embroidery magazineEmbroidery design from embroidery magazine
Embroidery design from embroidery magazineRivanEleraki
 
Mike Tyson Sign The Contract Big Boy Shirt
Mike Tyson Sign The Contract Big Boy ShirtMike Tyson Sign The Contract Big Boy Shirt
Mike Tyson Sign The Contract Big Boy ShirtTeeFusion
 
Best-NO1 Pakistani Amil Baba Real Amil baba In Pakistan Najoomi Baba in Pakis...
Best-NO1 Pakistani Amil Baba Real Amil baba In Pakistan Najoomi Baba in Pakis...Best-NO1 Pakistani Amil Baba Real Amil baba In Pakistan Najoomi Baba in Pakis...
Best-NO1 Pakistani Amil Baba Real Amil baba In Pakistan Najoomi Baba in Pakis...Amil baba
 
Building+your+Data+Project+on+AWS+-+Luke+Anderson.pdf
Building+your+Data+Project+on+AWS+-+Luke+Anderson.pdfBuilding+your+Data+Project+on+AWS+-+Luke+Anderson.pdf
Building+your+Data+Project+on+AWS+-+Luke+Anderson.pdfsaidbilgen
 
Create Funeral Invites Online @ feedvu.com
Create Funeral Invites Online @ feedvu.comCreate Funeral Invites Online @ feedvu.com
Create Funeral Invites Online @ feedvu.comjakyjhon00
 

Último (19)

UX Conference on UX Research Trends in 2024
UX Conference on UX Research Trends in 2024UX Conference on UX Research Trends in 2024
UX Conference on UX Research Trends in 2024
 
Khushi sharma undergraduate portfolio...
Khushi sharma undergraduate portfolio...Khushi sharma undergraduate portfolio...
Khushi sharma undergraduate portfolio...
 
How to use Ai for UX UI Design | ChatGPT
How to use Ai for UX UI Design | ChatGPTHow to use Ai for UX UI Design | ChatGPT
How to use Ai for UX UI Design | ChatGPT
 
Cold War Tensions Increase - 1945-1952.pptx
Cold War Tensions Increase - 1945-1952.pptxCold War Tensions Increase - 1945-1952.pptx
Cold War Tensions Increase - 1945-1952.pptx
 
LRFD Bridge Design Specifications-AASHTO (2014).pdf
LRFD Bridge Design Specifications-AASHTO (2014).pdfLRFD Bridge Design Specifications-AASHTO (2014).pdf
LRFD Bridge Design Specifications-AASHTO (2014).pdf
 
WCM Branding Agency | 210519 - Portfolio Review (F&B) -s.pptx
WCM Branding Agency | 210519 - Portfolio Review (F&B) -s.pptxWCM Branding Agency | 210519 - Portfolio Review (F&B) -s.pptx
WCM Branding Agency | 210519 - Portfolio Review (F&B) -s.pptx
 
Designing for privacy: 3 essential UX habits for product teams
Designing for privacy: 3 essential UX habits for product teamsDesigning for privacy: 3 essential UX habits for product teams
Designing for privacy: 3 essential UX habits for product teams
 
Production of Erythromycin microbiology.pptx
Production of Erythromycin microbiology.pptxProduction of Erythromycin microbiology.pptx
Production of Erythromycin microbiology.pptx
 
Design mental models for managing large-scale dbt projects. March 21, 2024 in...
Design mental models for managing large-scale dbt projects. March 21, 2024 in...Design mental models for managing large-scale dbt projects. March 21, 2024 in...
Design mental models for managing large-scale dbt projects. March 21, 2024 in...
 
Introduce Trauma-Informed Design to Your Organization - CSUN ATC 2024
Introduce Trauma-Informed Design to Your Organization - CSUN ATC 2024Introduce Trauma-Informed Design to Your Organization - CSUN ATC 2024
Introduce Trauma-Informed Design to Your Organization - CSUN ATC 2024
 
Math Group 3 Presentation OLOLOLOLILOOLLOLOL
Math Group 3 Presentation OLOLOLOLILOOLLOLOLMath Group 3 Presentation OLOLOLOLILOOLLOLOL
Math Group 3 Presentation OLOLOLOLILOOLLOLOL
 
The future of UX design support tools - talk Paris March 2024
The future of UX design support tools - talk Paris March 2024The future of UX design support tools - talk Paris March 2024
The future of UX design support tools - talk Paris March 2024
 
Construction Documents Checklist before Construction
Construction Documents Checklist before ConstructionConstruction Documents Checklist before Construction
Construction Documents Checklist before Construction
 
High-Quality Faux Embroidery Services | Cre8iveSkill
High-Quality Faux Embroidery Services | Cre8iveSkillHigh-Quality Faux Embroidery Services | Cre8iveSkill
High-Quality Faux Embroidery Services | Cre8iveSkill
 
Embroidery design from embroidery magazine
Embroidery design from embroidery magazineEmbroidery design from embroidery magazine
Embroidery design from embroidery magazine
 
Mike Tyson Sign The Contract Big Boy Shirt
Mike Tyson Sign The Contract Big Boy ShirtMike Tyson Sign The Contract Big Boy Shirt
Mike Tyson Sign The Contract Big Boy Shirt
 
Best-NO1 Pakistani Amil Baba Real Amil baba In Pakistan Najoomi Baba in Pakis...
Best-NO1 Pakistani Amil Baba Real Amil baba In Pakistan Najoomi Baba in Pakis...Best-NO1 Pakistani Amil Baba Real Amil baba In Pakistan Najoomi Baba in Pakis...
Best-NO1 Pakistani Amil Baba Real Amil baba In Pakistan Najoomi Baba in Pakis...
 
Building+your+Data+Project+on+AWS+-+Luke+Anderson.pdf
Building+your+Data+Project+on+AWS+-+Luke+Anderson.pdfBuilding+your+Data+Project+on+AWS+-+Luke+Anderson.pdf
Building+your+Data+Project+on+AWS+-+Luke+Anderson.pdf
 
Create Funeral Invites Online @ feedvu.com
Create Funeral Invites Online @ feedvu.comCreate Funeral Invites Online @ feedvu.com
Create Funeral Invites Online @ feedvu.com
 

How to implement a simple dalvik virtual machine

  • 1. How to Implement A Simple Dalvik Virtual Machine
  • 2. Agenda • Java Virtual Machine (JVM) – Java Virtual Machine and its instructions – Implement a Simple JVM • Dalvik Virtual Machine (DVM) – Dalvik Virtual Machine and its instructions – Implement a Simple DVM • References
  • 4. Java Virtual Machine Overview • Java Virtual Machine – JVM Model – Java ByteCode – Java ByteCode instructions • How to make a Java VM – A Simple Java Virtual Machine – Experiment
  • 5. Java Virtual Machine • Stack-based (Last-In First-Out) Virtual Machine • Computation in Stack • Load Java ByteCode to execute program Lines Stack-based VM Pseudo Code 0 POP 20 1 POP 7 2 ADD 20, 7, result 3 PUSH result http://www.codeproject.com/Articles/461052/Stack-based-vs-Register-based-VirtualMachine-Arch
  • 6. Java Source to ByteCode http://javabook1.blogspot.tw/2013/07/introduction-to-java.html
  • 7. JVM Model • Local Variables: • place the method input parameters • Operand Stack: • Computation Area • Put Instruction Operands and Return address • Constant Pool • Put Constant Data
  • 8. Java ByteCode • What is ByteCode ? – also known as p-code (portable code), is a form of instruction set designed for efficient execution by a software interpreter. An Java Addition Example a = 20, b = 30 C-pseudo X86 ASM Java ByteCode (Human-syntax) Java ByteCode binary int add mov eax, byte [ebp-4] (int a, int b ) mov edx, byte [ebp-8] { return a+b; add eax, edx iload_1 0x1a iload_2 0x1b iadd 0x60 } ireturn 0x3e ret
  • 9. A Java Addition Example Local Variables 20 30 Stack <<init>> C-pseudo An Addition Example a = 20, b = 30 Java ByteCode (Human-syntax) void add iload_1 (int a, int b ) iload_2 { iadd b = a+b; } istore_2 Local Variables Local Variables Local Variables Local Variables 1 20 20 20 20 2 30 30 30 50 Stack Stack Stack Stack 20 20 50 50 iadd istore_2 0 30 iload_1 iload_2
  • 10. More Java ByteCode Example class Example3c { public static void addAndPrint() { double result = addTwoTypes (1, 88.88); System.out.println(result); } public static double addTwoTypes (int i, double d) { return i + d; } } Inside the Java Virtual Machine, 2000, Bill Venners
  • 11. Java Bytecode instructions (Partials) Mnemonic iadd isub idiv imul irem Opcode Stack 0x60 Pop value1, Pop value2 result = value1 + value2 Push result 0x64 Pop value1, Pop value2 result = value1 - value2 Push result 0x6C Pop value1, Pop value2 result = value2 / value1 Push result 0x68 Pop value1, Pop value2 result = value1 * value2 Push result 0x70 Pop value1, Pop value2 result = value2 % value1 Push result http://en.wikipedia.org/wiki/Java_bytecode_instruction_listings
  • 12. How to make a Java Virtual Machine • At least to know about Java Class File – Wikipedia • http://en.wikipedia.org/wiki/Java_bytecode • http://en.wikipedia.org/wiki/Java_class_file – the Java Specification • http://docs.oracle.com/javase/6/docs/index.html
  • 13. Java Class File Java Class File Structure Magic Number: 0xCAFEBABE Version of Class File Format: the minor and major versions of the class file Constant Pool: Pool of constants for the class Access Flags: for example whether the class is abstract, static, etc. This Class: The name of the current class Super Class: The name of the super class Interfaces: Any interfaces in the class Fields: Any fields in the class Methods: Any methods in the class Attributes: Any attributes of the class (for example the name of the sourcefile, etc.)
  • 15. Download Simple JVM • goo.gl/FA3fwx
  • 16. Simple JVM Source Code Structure
  • 17. Simple JVM Constant Pool Interface Pool Stack Method Pool VM Engine ( Bytecode Loader) Class File Parser
  • 20. Simple JVM Instruction Table : simple_jvm_bytecodes.c
  • 21. iadd : simple_jvm_bytecodes.c iadd 0x60 Pop value1, Pop value2 result = value1 + value2 Push result
  • 22. imul: simple_jvm_bytecodes.c imul 0x68 Pop value1, Pop value2 result = value1 * value2 Push result
  • 23. Experiment: add irem instruction into Simple JVM irem 0x70 goo.gl/xIMuym Execution Result: Pop value1, Pop value2 result = value2 % value1 Push result
  • 25. Dalvik Virtual Machine Overview • • • • Java Translation for JVM and DVM Hello World on Dalvik VM DVM ByteCode DVM ByteCode Interpreter Generation on Android Open Source • Dex File Header • An Simple Dalvik Virtual Machine
  • 26. Java Translation for JVM and DVM http://www.codeproject.com/Articles/461052/ Stack-based-vs-Register-based-VirtualMachine-Arch
  • 27. Hello World on Dalvik VM Roadmap Build Environment Setup JDK Installation Download Android Open Source Compile Dalvik VM x86 host Build Dalvik VM Produce Compile Hello World Dalvik x86 Foo.jar Compile Hello World Run
  • 28. Android Open Source Build Setup • Ubuntu 12.04 – Virtual Box • sudo apt-get install git gnupg flex bison gperf build-essential zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev libx11dev:i386 libreadline6-dev:i386 libgl1-mesa-dri:i386 libgl1-mesadev g++-multilib mingw32 tofrodos python-markdown libxml2utils xsltproc zlib1g-dev:i386 • 如果發生衝突使用 libgl1-mesa-glx:i386 Android Open Source Initializing a Build Environment http://source.android.com/source/initializing.html
  • 30. JDK Installation on Ubuntu • sudo add-apt-repository ppa:webupd8team/java • sudo apt-get update • sudo apt-get install oracle-java6-installer Android Open Source Initializing a Build Environment http://source.android.com/source/initializing.html
  • 31. Download Android Open Source(1) • • • • cd ~ mkdir android_source cd android_source mkdir bin • curl http://commondatastorage.googleapis.com/ git-repo-downloads/repo > repo • chmod a+x repo • cd ..
  • 32. Download Android Open Source(2) • Check android release Tag
  • 33. Download Android Open Source(3) • mkdir test & cd test • mkdir bin & cd bin • curl http://commondatastorage.googleapis.com/gitrepo-downloads/repo > repo • chmod 777 repo • cd .. • mkdir android-4.3_r1 • cd android-4.3_r1 • ../bin/repo init -u https://android.googlesource.com/platform/manifest b android-4.3_r1 – Initial android-4.3_r1 • repo sync – Download Android Open Source
  • 34. Download Android Open Source Result Repo Init Repo Sync
  • 35. Compile Dalvik VM x86 • source build/envsetup.sh • lunch 2 • make dalvikvm dalvik-host core ext dexopt framework android.policy services make_dvm.sh
  • 36. Compile Dalvik VM x86 Result
  • 37. Setup DalvikVM x86 • mkdir -p dalvik-x86-android-4.3 • mkdir -p dalvik-x86-android-4.3/tmp/dalvik-cache • cp -r android-4.3_r1/out/target/product/generic_x86/system/ dalvik-x86-android-4.3/system/ • cp -r android-4.3_r1/out/host/linux-x86/bin dalvik-x86-android4.3/ • cp -r android-4.3_r1/out/host/linux-x86/lib dalvik-x86-android4.3/ • cp -r android-4.3_r1/out/host/linux-x86/usr dalvik-x86-android4.3/system/
  • 38. Hello World on Dalvik VM Roadmap Build Environment Setup JDK Installation Download Android Open Source Compile Dalvik VM x86 host Build Dalvik VM Produce Compile Hello World Dalvik x86 Foo.jar Compile Hello World Run
  • 39. Download ADT (Android Development Tools ) for Compile Hello World http://developer.android.com/sdk/index.html# download
  • 40. Compile Hello World to DEX Foo.java javac Foo.java javac Foo.class dx --dex –output=foo.jar Foo.class Classes.dex dx foo.jar
  • 41. Hello World • Foo1.java Foo1 { public static void main ( String args[] ) { System.out.println(“Hello World”); } } • javac Foo1.java • dx --dex --output=foo1.jar Foo1.class
  • 42. Run Hello World on DalvikVM x86 run_dvm2.sh $@ 是 bash script 的 parameters ./run_dvm2.sh –cp foo1.jar Foo
  • 43. Dalvik VM and ByteCode • Register-based, 32bits • Instructions Fetch Unit : 16 bits – Byte code store as binary • Constant pools – String, Type, Field, Method, Class • Human-syntax and mnemonics Insturction Suffix -wide(64bits OpCodes) -char -boolean -short -byte -int -long -float -object -string -class -void
  • 44. Dalvik ByteCode Human-syntax • Example "move-wide/from16 vAA, vBBBB": – Opcode : “move" move a register's value). – "wide" is the name suffix • it operates on wide (64 bit) data. – "from16" is the opcode suffix • 16-bit register reference as a source. – "vAA" is the destination register • v0 – v255. – "vBBBB" is the source register • v0 – v65535.
  • 45. Dalvik ByteCode Example OpCode suffix1 Suffix2 destination source move wide from16 vAA vBBBB 4 v6 int #0 double-to-int v0 v0 invoke-virtual method@0002 {v3,v4} const-string string@0005 v4 mul-int v3 v0,v1 v2 v2,v3 const add-int 2addr
  • 46. DVM ByteCode Interpreter Generation on AOSP • How to generate the InterpC-portable.cpp – rebuild.sh TARGET_ARCH=portable – parse Makefile-mterp – gen-mterp.py TARGET_ARCH=portable – parse config-portable – concatenate cpp files to one files • InterpC-portable.cpp
  • 47. Dalvik Mterp Generation flow Rebuild.sh Invoke makefile Makefile-mterp TARGET_ARCH_EXT=portable gen-mterp.py parse config-portable Concatenate files InterpC-portable.cpp
  • 49. Dex Translation Example SymDroid: Symbolic Execution for Dalvik Bytecode- Technical Report CS-TR-5022, July 2012 Jinseong Jeon, Kristopher K. Micinski, Je rey S. Foster Department of Computer Science, University of Maryland, College Park
  • 51. A Simple Dalvik Virtual Machine Register Bank v0 ~ v65535 Program Context VM Stat / PC Heap VM Engine DEX Parser
  • 52. Simple DVM Instruction Table : simple_dvm_bytecodes.c
  • 54. An Simple Dalvik VM Experiment goo.gl/J5VFQV 1. make_simple_dvm 2. simple_dvm Foo1.dex
  • 55. References • Android Open Source – http://source.android.com/index.html • Android XRef – http://androidxref.com/ • Java ByteCodes Fundamentals – http://arhipov.blogspot.tw/2011/01/java-bytecodefundamentals.html • Java ByteCode Instruction listings – http://en.wikipedia.org/wiki/Java_bytecode_instructi on_listings • Dalvik Wiki – http://en.wikipedia.org/wiki/Dalvik_(software)