0% found this document useful (0 votes)
74 views21 pages

Dalvik Opcodes Java

This document provides details about Dalvik opcodes including opcode names, explanations, and examples. It lists various opcodes for performing operations like moving and copying values between registers, loading constants, returning values from methods, and type checking. The document contains opcode information in a table with columns for opcode number, name, explanation, and examples of bytecode instructions.

Uploaded by

Yee Camelia
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
74 views21 pages

Dalvik Opcodes Java

This document provides details about Dalvik opcodes including opcode names, explanations, and examples. It lists various opcodes for performing operations like moving and copying values between registers, loading constants, returning values from methods, and type checking. The document contains opcode information in a table with columns for opcode number, name, explanation, and examples of bytecode instructions.

Uploaded by

Yee Camelia
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 21

Dalvik opcodes

Author: Gabor Paller

Copyright: this document is in the public domain. If you reuse it, please consider quoting this page.

Vx values in the table denote a Dalvik register. Depending on the instruction, 16, 256 or 64k registers can be
accessed. Operations on long and double values use two registers, e.g. a double value addressed in the V0
register occupies the V0 and V1 registers.

Boolean values are stored as 1 for true and 0 for false. Operations on booleans are translated into integer
operations.

All the examples are in hig-endian format, e.g. 0F00 0A00 is coded as 0F, 00, 0A, 00 sequence.

Note there are no explanation/example at some instructions. This means that I have not seen that
instruction "in the wild" and its presence/name is only known from Android opcode constant list.

Consider using the dedexer tool to observe the Dalvik opcodes in real-life dex files!

Opcode Opcode name Explanation Example


(hex)
00 nop No operation 0000 - nop
01 move vx,vy Moves the content 0110 - move v0, v1
of vy into vx. Both Moves v1 into v0.
registers must be in
the first 256
register range.
02 move/from16 vx,vy Moves the content 0200 1900 - move/from16 v0, v25
of vy into vx. vy Moves v25 into v0.
may be in the 64k
register range while
vx is one of the first
256 registers.
03 move/16
04 move-wide
05 move-wide/from16 vx,vy Moves a 0516 0000 - move-wide/from16 v22, v0
long/double value Moves v0 into v22.
from vy to vx. vy
may be in the 64k
register range while
wx is one of the
first 256 registers.
06 move-wide/16
07 move-object vx,vy Moves the object 0781 - move-object v1, v8
reference from vy Moves the object reference in v8 to v1.
to vx.
08 move-object/from16 vx,vy Moves the object 0801 1500 - move-object/from16 v1, v21
reference from vy Move the object reference in v21 to v1.
to vx, vy can
address 64k
registers and vx
can address 256
registers.
09 move-object/16
0A move-result vx Move the result 0A00 - move-result v0
value of the Move the return value of a previous method
previous method invocation into v0.
invocation into vx.
0B move-result-wide vx Move the 0B02 - move-result-wide v2
long/double result Move the long/double result value of the previous
value of the method invocation into v2,v3.
previous method
invocation into
vx,vx+1.
0C move-result-object vx Move the result 0C00 - move-result-object v0
object reference of
the previous
method invocation
into vx.
0D move-exception vx Move the exception 0D19 - move-exception v25
object reference
thrown during a
method invocation
into vx.
0E return-void Return without a 0E00 - return-void
return value
0F return vx Return with vx 0F00 - return v0
return value Returns with return value in v0.

10 return-wide vx Return with 1000 - return-wide v0


double/long result Returns with a double/long value in v0,v1.
in vx,vx+1.
11 return-object vx Return with vx 1100 - return-object v0
object reference Returns with object reference value in v0
value.
12 const/4 vx,lit4 Puts the 4 bit 1221 - const/4 v1, #int2
constant into vx Moves literal 2 into v1. The destination register is
in the lower 4 bit in the second byte, the literal 2 is
in the higher 4 bit.
13 const/16 vx,lit16 Puts the 16 bit 1300 0A00 - const/16 v0, #int 10
constant into vx Puts the literal constant of 10 into v0.
14 const vx, lit32 Puts the integer 1400 4E61 BC00 - const v0, #12345678 //
constant into vx #00BC614E
Moves literal 12345678 into v0.
15 const/high16 v0, lit16 Puts the 16 bit 1500 2041 - const/high16 v0, #float 10.0 //
constant into the #41200000
topmost bits of the Moves the floating literal of 10.0 into v0. The 16
register. Used to bit literal in the instruction carries the top 16 bits
initialize float of the floating point number.
values.
16 const-wide/16 vx, lit16 Puts the integer 1600 0A00 - const-wide/16 v0, #long 10
constant into vx Moves literal 10 into v0 and v1 registers.
and vx+1 registers,
expanding the
integer constant
into a long
constant..
17 const-wide/32 vx, lit32 Puts the 32 bit 1702 4e61 bc00 - const-wide/32 v2, #long
constant into vx 12345678 // #00bc614e
and vx+1 registers, Puts #12345678 into v2 and v3 registers.
expanding the
integer constant
into a long
constant.
18 const-wide vx, lit64 Puts the 64 bit 1802 874b 6b5d 54dc 2b00- const-wide v2, #long
constant into vx 12345678901234567 // #002bdc545d6b4b87
and vx+1 registers. Puts #12345678901234567 into v2 and v3
registers.
19 const-wide/high16 vx,lit16 Puts the 16 bit 1900 2440 - const-wide/high16 v0, #double 10.0
constant into the // #402400000
highest 16 bit of vx Puts the double constant of 10.0 into v0 register.
and vx+1 registers.
Used to initialize
double values.
1A const-string vx,string_id Puts reference to a 1A08 0000 - const-string v8, "" // string@0000
string constant Puts reference to string@0000 (entry #0 in the
identified by string table) into v8.
string_id into vx.
1B const-string-jumbo
1C const-class vx,type_id Moves the class 1C00 0100 - const-class v0, Test3 // type@0001
object of a class Moves reference to Test3.class (entry#1 in the
identified by type_id type id table) into
(e.g. Object.class)
into vx.
1D monitor-enter vx Obtains the monitor 1D03 - monitor-enter v3
of the object Obtains the monitor of the object referenced by
referenced by vx. v3.
1E monitor-exit Releases the 1E03 - monitor-exit v3
monitor of the Releases the monitor of the object referenced by
object referenced v3.
by vx.
1F check-cast vx, type_id Checks whether the 1F04 0100 - check-cast v4, Test3 // type@0001
object reference in Checks whether the object reference in v4 can be
vx can be cast to an cast to type@0001 (entry #1 in the type id table)
instance of a class
referenced by
type_id. Throws
ClassCastException
if the cast is not
possible, continues
execution
otherwise.
20 instance-of vx,vy,type_id Checks whether vy 2040 0100 - instance-of v0, v4, Test3 //
is instance of a type@0001
class identified by Checks whether the object reference in v4 is an
type_id. Sets vx instance of type@0001 (entry #1 in the type id
non-zero if it is, 0 table). Sets v0 to non-zero if v4 is instance of
otherwise. Test3, 0 otherwise.
21 array-length vx,vy Calculates the 2111 - array-length v1, v1
number of Calculates the number of elements of the array
elements of the referenced by v1 and puts the result into v1.
array referenced by
vy and puts the
length value into vx.
22 new-instance vx,type Instantiates an 2200 1500 - new-instance v0,
object type and java.io.FileInputStream // type@0015
puts the reference Instantiates type@0015 (entry #15H in the type
of the newly table) and puts its reference into v0.
created instance
into vx.
23 new-array vx,vy,type_id Generates a new 2312 2500 - new-array v2, v1, char[] // type@0025
array of type_id Generates a new array of type@0025 type and v1
type and vy element size and puts the reference to the new array into
size and puts the v2.
reference to the
array into vx.
24 filled-new-array Generates a new 2420 530D 0000 - filled-new-array {v0,v0},[I //
{parameters},type_id array of type_id and type@0D53
fills it with the Generates a new array of type@0D53. The array's
parameters5. size will be 2 and both elements will be filled with
Reference to the the contents of v0 register.
newly generated
array can be
obtained by a
move-result-object
instruction,
immediately
following the filled-
new-array
instruction.
25 filled-new-array-range Generates a new 2503 0600 1300 - filled-new-array/range
{vx..vy},type_id array of type_id and {v19..v21}, [B // type@0006
fills it with a range Generates a new array of type@0D53. The array's
of parameters. size will be 3 and the elements will be filled using
Reference to the the v19,v20 and v21 registers4.
newly generated
array can be
obtained by a
move-result-object
instruction,
immediately
following the filled-
new-array
instruction.
26 fill-array-data Fills the array 2606 2500 0000 - fill-array-data v6, 00e6 // +0025
vx,array_data_offset referenced by vx Fills the array referenced by v0 with the static
with the static data. data at current instruction+25H words location.
The location of the The offset is expressed as a 32-bit number. The
static data is the static data is stored in the following format:
sum of the position 0003 // Table type: static array data
of the current 0400 // Byte per array element (in this case, 4 byte
instruction and the integers)
offset 0300 0000 // Number of elements in the table
0100 0000 // Element #0: integer 1
0200 0000 // Element #1: integer 2
0300 0000 // Element #2: integer3
27 throw vx Throws an 2700 - throw v0
exception object. Throws an exception. The exception object
The reference of reference is in v0.
the exception
object is in vx.
28 goto target Unconditional jump 28F0 - goto 0005 // -0010
by short offset2. Jumps to current position-16 words (hex 10).
0005 is the label of the target instruction.
29 goto/16 target Unconditional jump 2900 0FFE - goto/16 002f // -01f1
by 16 bit offset2. Jumps to the current position-1F1H words. 002F
is the label of the target instruction.
2A goto/32 target
2B packed-switch vx,table Implements a 2B02 0C00 0000 - packed-switch v2, 000c //
switch statement +000c
where the case Execute a packed switch according to the switch
constants are close argument in v2. The position of the index table is
to each other. The at current instruction+0CH words. The table looks
instruction uses an like the following:
index table. vx 0001 // Table type: packed switch table
indexes into this 0300 // number of elements
table to find the 0000 0000 // element base
offset of the 0500 0000 0: 00000005 // case 0: +00000005
instruction for a 0700 0000 1: 00000007 // case 1: +00000007
particular case. If 0900 0000 2: 00000009 // case 2: +00000009
vx falls out of the
index table, the
execution
continues on the
next instruction
(default case).
2C sparse-switch vx,table Implements a 2C02 0c00 0000 - sparse-switch v2, 000c // +000c
switch statement Execute a sparse switch according to the switch
with sparse case argument in v2. The position of the lookup table is
table. The at current instruction+0CH words. The table looks
instruction uses a like the following.
lookup table with 0002 // Table type: sparse switch table
case constants and 0300 // number of elements
offsets for each 9cff ffff // first case: -100
case constant. If fa00 0000 // second case constant: 250
there is no match in e803 0000 // third case constant: 1000
the table, execution 0500 0000 // offset for the first case constant: +5
continues on the 0700 0000 // offset for the second case constant:
next instruction +7
(default case). 0900 0000 // offset for the third case constant: +9
2D cmpl-float Compares the float 2D00 0607 - cmpl-float v0, v6, v7
values in vy and vz Compares the float values in v6 and v7 then sets
and sets the integer v0 accordingly. NaN bias is less-than, the
value in vx instruction will return -1 if any of the parameters
accordingly3 is NaN.
2E cmpg-float vx, vy, vz Compares the float 2E00 0607 - cmpg-float v0, v6, v7
values in vy and vz Compares the float values in v6 and v7 then sets
and sets the integer v0 accordingly. NaN bias is greater-than, the
value in vx instruction will return 1 if any of the parameters is
accordingly3. NaN.
2F cmpl-double vx,vy,vz Compares the 2F19 0608 - cmpl-double v25, v6, v8
double values in vy Compares the double values in v6,v7 and v8,v9
and vz2 and sets and sets v25 accordingly. NaN bias is less-than,
the integer value in the instruction will return -1 if any of the
vx accordingly3. parameters is NaN.
30 cmpg-double vx, vy, vz Compares the 3000 080A - cmpg-double v0, v8, v10
double values in vy Compares the double values in v8,v9 and v10,v11
and vz2 and sets then sets v0 accordingly. NaN bias is greater-than,
the integer value in the instruction will return 1 if any of the
vx accordingly3. parameters is NaN.
31 cmp-long vx, vy, vz Compares the long 3100 0204 - cmp-long v0, v2, v4
values in vy and vz Compares the long values in v2 and v4 then sets
and sets the integer v0 accordingly.
value in vx
accordingly3.
32 if-eq vx,vy,target Jumps to target if 32b3 6600 - if-eq v3, v11, 0080 // +0066
vx==vy2. vx and vy Jumps to the current position+66H words if
are integer values. v3==v11. 0080 is the label of the target
instruction.
33 if-ne vx,vy,target Jumps to target if 33A3 1000 - if-ne v3, v10, 002c // +0010
vx!=vy2. vx and vy Jumps to the current position+10H words if
are integer values. v3!=v10. 002c is the label of the target instruction.
34 if-lt vx,vy,target Jumps to target is 3432 CBFF - if-lt v2, v3, 0023 // -0035
vx<vy2. vx and vy Jumps to the current position-35H words if v2<v3.
are integer values. 0023 is the label of the target instruction.
35 if-ge vx, vy,target Jumps to target if 3510 1B00 - if-ge v0, v1, 002b // +001b
vx>=vy2. vx and vy Jumps to the current position+1BH words if
are integer values. v0>=v1. 002b is the label of the target instruction.
36 if-gt vx,vy,target Jumps to target if 3610 1B00 - if-ge v0, v1, 002b // +001b
vx>vy2. vx and vy Jumps to the current position+1BH words if
are integer values. v0>v1. 002b is the label of the target instruction.
37 if-le vx,vy,target Jumps to target if 3756 0B00 - if-le v6, v5, 0144 // +000b
vx<=vy2. vx and vy Jumps to the current position+0BH words if
are integer values. v6<=v5. 0144 is the label of the target instruction.
38 if-eqz vx,target Jumps to target if 3802 1900 - if-eqz v2, 0038 // +0019
vx==02. vx is an Jumps to the current position+19H words if
integer value. v2==0. 0038 is the label of the target instruction.
39 if-nez vx,target Checks vx and 3902 1200 - if-nez v2, 0014 // +0012
jumps if vx is Jumps to current position+18 words (hex 12) if v2
nonzero2. is nonzero. 0014 is the label of the target
instruction.
3A if-ltz vx,target Checks vx and 3A00 1600 - if-ltz v0, 002d // +0016
jumps if vx<02. Jumps to the current position+16H words if v0<0.
002d is the label of the target instruction.
3B if-gez vx,target Checks vx and 3B00 1600 - if-gez v0, 002d // +0016
jumps if vx>=02. Jumps to the current position+16H words if v0
>=0. 002d is the label of the target instruction.
3C if-gtz vx,target Checks vx and 3C00 1D00 - if-gtz v0, 004a // +001d
jumps if vx>02. Jumps to the current position+1DH words if v0>0.
004A is the label of the target instruction.
3D if-lez vx,target Checks vx and 3D00 1D00 - if-lez v0, 004a // +001d
jumps if vx<=02. Jumps to the current position+1DH words if
v0<=0. 004A is the label of the target instruction.
3E unused_3E
3F unused_3F
40 unused_40
41 unused_41
42 unused_42
43 unused_43
44 aget vx,vy,vz Gets an integer 4407 0306 - aget v7, v3, v6
value of an object Gets an integer array element. The array is
reference array into referenced by v3 and the element is indexed by
vx. The array is v6. The element will be put into v7.
referenced by vy
and is indexed by
vz.
45 aget-wide vx,vy,vz Gets a long/double 4505 0104 - aget-wide v5, v1, v4
value of Gets a long/double array element. The array is
long/double array referenced by v1 and the element is indexed by
into vx,vx+1. The v4. The element will be put into v5,v6.
array is referenced
by vy and is indexed
by vz.
46 aget-object vx,vy,vz Gets an object 4602 0200 - aget-object v2, v2, v0
reference value of Gets an object reference array element. The array
an object reference is referenced by v2 and the element is indexed by
array into vx. The v0. The element will be put into v2.
array is referenced
by vy and is indexed
by vz.
47 aget-boolean vx,vy,vz Gets a boolean 4700 0001 - aget-boolean v0, v0, v1
value of a boolean Gets a boolean array element. The array is
array into vx. The referenced by v0 and the element is indexed by
array is referenced v1. The element will be put into v0.
by vy and is indexed
by vz.
48 aget-byte vx,vy,vz Gets a byte value of 4800 0001 - aget-byte v0, v0, v1
a byte array into vx. Gets a byte array element. The array is referenced
The array is by v0 and the element is indexed by v1. The
referenced by vy element will be put into v0.
and is indexed by
vz.
49 aget-char vx, vy,vz Gets a char value 4905 0003 - aget-char v5, v0, v3
of a character array Gets a character array element. The array is
into vx. The referenced by v0 and the element is indexed by
element is indexed v3. The element will be put into v5.
by vz, the array
object is referenced
by vy
4A aget-short vx,vy,vz Gets a short value 4A00 0001 - aget-short v0, v0, v1
of a short array into Gets a short array element. The array is
vx. The element is referenced by v0 and the element is indexed by
indexed by vz, the v1. The element will be put into v0.
array object is
referenced by vy.
4B aput vx,vy,vz Puts the integer 4B00 0305 - aput v0, v3, v5
value in vx into an Puts the integer value in v2 into an integer array
element of an referenced by v0. The target array element is
integer array. The indexed by v1.
element is indexed
by vz, the array
object is referenced
by vy.
4C aput-wide vx,vy,vz Puts the 4C05 0104 - aput-wide v5, v1, v4
double/long value Puts the double/long value in v5,v6 into a
in vx,vx+1 into a double/long array referenced by v1. The target
double/long array. array element is indexed by v4.
The array is
referenced by vy,
the element is
indexed by vz.
4D aput-object vx,vy,vz Puts the object 4D02 0100 - aput-object v2, v1, v0
reference value in Puts the object reference value in v2 into an
vx into an element object reference array referenced by v0. The
of an object target array element is indexed by v1.
reference array. The
element is indexed
by vz, the array
object is referenced
by vy.
4E aput-boolean vx,vy,vz Puts the boolean 4E01 0002 - aput-boolean v1, v0, v2
value in vx into an Puts the boolean value in v1 into an object
element of a reference array referenced by v0. The target array
boolean array. The element is indexed by v2.
element is indexed
by vz, the array
object is referenced
by vy.
4F aput-byte vx,vy,vz Puts the byte value 4F02 0001 - aput-byte v2, v0, v1
in vx into an Puts the boolean value in v2 into a byte array
element of a byte referenced by v0. The target array element is
array. The element indexed by v1.
is indexed by vz, the
array object is
referenced by vy.
50 aput-char vx,vy,vz Puts the char value 5003 0001 - aput-char v3, v0, v1
in vx into an Puts the character value in v3 into a character
element of a array referenced by v0. The target array element is
character array. The indexed by v1.
element is indexed
by vz, the array
object is referenced
by vy.
51 aput-short vx,vy,vz Puts the short value 5102 0001 - aput-short v2, v0, v1
in vx into an Puts the short value in v2 into a character array
element of a short referenced by v0. The target array element is
array. The element indexed by v1.
is indexed by vz, the
array object is
referenced by vy.
52 iget vx, vy, field_id Reads an instance 5210 0300 - iget v0, v1, Test2.i6:I // field@0003
field into vx. The Reads field@0003 into v0 (entry #3 in the field id
instance is table). The instance is referenced by v1.
referenced by vy.
53 iget-wide vx,vy,field_id Reads an instance 5320 0400 - iget-wide v0, v2, Test2.l0:J //
field into vx1. The field@0004
instance is Reads field@0004 into v0 and v1 registers (entry
referenced by vy. #4 in the field id table). The instance is referenced
by v2.
54 iget-object vx,vy,field_id Reads an object iget-object v1, v2,
reference instance LineReader.fis:Ljava/io/FileInputStream; //
field into vx. The field@0002
instance is Reads field@0002 into v1 (entry #2 in the field id
referenced by vy. table). The instance is referenced by v2.
55 iget-boolean vx,vy,field_id Reads a boolean 55FC 0000 - iget-boolean v12, v15, Test2.b0:Z //
instance field into field@0000
vx. The instance is Reads the boolean field@0000 into v12 register
referenced by vy. (entry #0 in the field id table). The instance is
referenced by v15.
56 iget-byte vx,vy,field_id Reads a byte 5632 0100 - iget-byte v2, v3, Test3.bi1:B //
instance field into field@0001
vx. The instance is Reads the char field@0001 into v2 register (entry
referenced by vy. #1 in the field id table). The instance is referenced
by v3.
57 iget-char vx,vy,field_id Reads a char 5720 0300 - iget-char v0, v2, Test3.ci1:C //
instance field into field@0003
vx. The instance is Reads the char field@0003 into v0 register (entry
referenced by vy. #3 in the field id table). The instance is referenced
by v2.
58 iget-short vx,vy,field_id Reads a short 5830 0800 - iget-short v0, v3, Test3.si1:S //
instance field into field@0008
vx. The instance is Reads the short field@0008 into v0 register (entry
referenced by vy. #8 in the field id table). The instance is referenced
by v3.
59 iput vx,vy, field_id Puts vx into an 5920 0200 - iput v0,v2, Test2.i6:I // field@0002
instance field. The Stores v0 into field@0002 (entry #2 in the field id
instance is table). The instance is referenced by v2.
referenced by vy.
5A iput-wide vx,vy, field_id Puts the wide value 5A20 0000 - iput-wide v0,v2, Test2.d0:D //
located in vx and field@0000
vx+1 registers into Stores the wide value in v0, v1 registers into
an instance field. field@0000 (entry #0 in the field id table). The
The instance is instance is referenced by v2.
referenced by vy.
5B iput-object vx,vy,field_id Puts the object 5B20 0000 - iput-object v0, v2,
reference in vx into LineReader.bis:Ljava/io/BufferedInputStream; //
an instance field. field@0000
The instance is Stores the object reference in v0 into field@0000
referenced by vy. (entry #0 in the field table). The instance is
referenced by v2.
5C iput-boolean vx,vy, field_id Puts the boolean 5C30 0000 - iput-boolean v0, v3, Test2.b0:Z //
value located in vx field@0000
into an instance Puts the boolean value in v0 into field@0000
field. The instance (entry #0 in the field id table). The instance is
is referenced by vy. referenced by v3.
5D iput-byte vx,vy,field_id Puts the byte value 5D20 0100 - iput-byte v0, v2, Test3.bi1:B //
located in vx into an field@0001
instance field. The Puts the boolean value in v0 into field@0001
instance is (entry #1 in the field id table). The instance is
referenced by vy. referenced by v2.
5E iput-char vx,vy,field_id Puts the char value 5E20 0300 - iput-char v0, v2, Test3.ci1:C //
located in vx into an field@0003
instance field. The Puts the char value in v0 into field@0003 (entry
instance is #3 in the field id table). The instance is referenced
referenced by vy. by v2.
5F iput-short vx,vy,field_id Puts the short value 5F21 0800 - iput-short v1, v2, Test3.si1:S //
located in vx into an field@0008
instance field. The Puts the short value in v1 into field@0008 (entry
instance is #8 in the field id table). The instance is referenced
referenced by vy. by v2.
60 sget vx,field_id Reads the integer 6000 0700 - sget v0, Test3.is1:I // field@0007
field identified by Reads field@0007 (entry #7 in the field id table)
the field_id into vx. into v0.
61 sget-wide vx, field_id Reads the static 6100 0500 - sget-wide v0, Test2.l1:J // field@0005
field identified by Reads field@0005 (entry #5 in the field id table)
the field_id into vx into v0 and v1 registers.
and vx+1 registers.
62 sget-object vx,field_id Reads the object 6201 0C00 - sget-object v1,
reference field Test3.os1:Ljava/lang/Object; // field@000c
identified by the Reads field@000c (entry #CH in the field id table)
field_id into vx. into v1.
63 sget-boolean vx,field_id Reads the boolean 6300 0C00 - sget-boolean v0, Test2.sb:Z //
static field field@000c
identified by the Reads boolean field@000c (entry #12 in the field
field_id into vx. id table) into v0.
64 sget-byte vx,field_id Reads the byte 6400 0200 - sget-byte v0, Test3.bs1:B //
static field field@0002
identified by the Reads byte field@0002 (entry #2 in the field id
field_id into vx. table) into v0.
65 sget-char vx,field_id Reads the char 6500 0700 - sget-char v0, Test3.cs1:C //
static field field@0007
identified by the Reads byte field@0007 (entry #7 in the field id
field_id into vx. table) into v0.
66 sget-short vx,field_id Reads the short 6600 0B00 - sget-short v0, Test3.ss1:S //
static field field@000b
identified by the Reads short field@000b (entry #BH in the field id
field_id into vx. table) into v0.
67 sput vx, field_id Puts vx into a static 6700 0100 - sput v0, Test2.i5:I // field@0001
field. Stores v0 into field@0001 (entry #1 in the field id
table).
68 sput-wide vx, field_id Puts vx and vx+1 6800 0500 - sput-wide v0, Test2.l1:J // field@0005
into a static field. Puts the long value in v0 and v1 into the
field@0005 static field (entry #5 in the field id
table).
69 sput-object vx,field_id Puts object 6900 0c00 - sput-object v0,
reference in vx into Test3.os1:Ljava/lang/Object; // field@000c
a static field. Puts the object reference value in v0 into the
field@000c static field (entry #CH in the field id
table).
6A sput-boolean vx,field_id Puts boolean value 6A00 0300 - sput-boolean v0, Test3.bls1:Z //
in vx into a static field@0003
field.
Puts the byte value in v0 into the field@0003
static field (entry #3 in the field id table).
6B sput-byte vx,field_id Puts byte value in 6B00 0200 - sput-byte v0, Test3.bs1:B //
vx into a static field. field@0002
Puts the byte value in v0 into the field@0002
static field (entry #2 in the field id table).
6C sput-char vx,field_id Puts char value in 6C01 0700 - sput-char v1, Test3.cs1:C //
vx into a static field. field@0007
Puts the char value in v1 into the field@0007
static field (entry #7 in the field id table).
6D sput-short vx,field_id Puts short value in 6D00 0B00 - sput-short v0, Test3.ss1:S //
vx into a static field. field@000b
Puts the short value in v0 into the field@000b
static field (entry #BH in the field id table).
6E invoke-virtual { Invokes a virtual 6E53 0600 0421 - invoke-virtual { v4, v0, v1, v2,
parameters }, method with v3}, Test2.method5:(IIII)V // method@0006
methodtocall parameters. Invokes the 6th method in the method table with
the following arguments: v4 is the "this" instance,
v0, v1, v2, and v3 are the method parameters. The
method has 5 arguments (4 MSB bits of the
second byte)5.
6F invoke-super Invokes the virtual 6F10 A601 0100 invoke-super
{parameter},methodtocall method of the {v1},java.io.FilterOutputStream.close:()V //
immediate parent method@01a6
class. Invokes method@01a6 with one parameter, v1.
70 invoke-direct { parameters Invokes a method 7010 0800 0100 - invoke-direct {v1},
}, methodtocall with parameters java.lang.Object.<init>:()V // method@0008
without the virtual Invokes the 8th method in the method table with
method resolution. just one parameter, v1 is the "this" instance5.
71 invoke-static Invokes a static 7110 3400 0400 - invoke-static {v4},
{parameters}, method with java.lang.Integer.parseInt:( Ljava/lang/String;)I //
methodtocall parameters. method@0034
Invokes method@34 static method. The method
is called with one parameter, v45.
72 invoke-interface Invokes an 7240 2102 3154 invoke-interface {v1, v3, v4, v5},
{parameters},methodtocall interface method. mwfw.IReceivingProtocolAdapter.receivePackage:
(
ILjava/lang/String;Ljava/io/InputStream;)Z //
method@0221
Invokes method@221 interface method using
parameters in v1,v3,v4 and v55.
73 unused_73
74 invoke-virtual/range Invokes virtual 7403 0600 1300 - invoke-virtual {v19..v21},
{vx..vy},methodtocall method with a Test2.method5:(IIII)V // method@0006
range of registers. Invokes the 6th method in the method table with
The instruction the following arguments: v19 is the "this"
specifies the first instance, v20 and v21 are the method
register and the parameters.
number of registers
to be passed to the
method.
75 invoke-super/range Invokes the virtual 7501 A601 0100 invoke-super
method of the {v1},java.io.FilterOutputStream.close:()V //
immediate parent method@01a6
class. The Invokes method@01a6 with one parameter, v1.
instruction
specifies the first
register and the
number of registers
to be passed to the
method.
76 invoke-direct/range Invokes direct 7603 3A00 1300 - invoke-direct/range
{vx..vy},methodtocall method with a {v19..21},java.lang.Object.<init>:()V //
range of registers. method@003a
The instruction Invokes method@3A with 1 parameters (second
specifies the first byte of the instruction=03). The parameter is
register and the stored in v19 (5th,6th bytes of the instruction).
number of registers
to be passed to the
method.
77 invoke-static/range Invokes static 7703 3A00 1300 - invoke-static/range
{vx..vy},methodtocall method with a {v19..21},java.lang.Integer.parseInt:(
range of registers. Ljava/lang/String;)I // method@0034
The instruction Invokes method@3A with 1 parameters (second
specifies the first byte of the instruction=03). The parameter is
register and the stored in v19 (5th,6th bytes of the instruction).
number of registers
to be passed to the
method.
78 invoke-interface-range Invokes an 7840 2102 0100 invoke-interface {v1..v4},
interface method mwfw.IReceivingProtocolAdapter.receivePackage:
with a range of (
registers. The ILjava/lang/String;Ljava/io/InputStream;)Z //
instruction method@0221
specifies the first Invokes method@221 interface method using
register and the parameters in v1..v4.
number of registers
to be passed to the
method.
79 unused_79
7A unused_7A
7B neg-int vx,vy Calculates vx=-vy. 7B01 - neg-int v1,v0
Calculates -v0 and stores the result in v1.
7C not-int vx,vy
7D neg-long vx,vy Calculates 7D02 - neg-long v2,v0
vx,vx+1=-(vy,vy+1) Calculates -(v0,v1) and stores the result into
(v2,v3)
7E not-long vx,vy
7F neg-float vx,vy Calculates vx=-vy 7F01 - neg-float v1,v0
Calculates -v0 and stores the result into v1.
80 neg-double vx,vy Calculates 8002 - neg-double v2,v0
vx,vx+1=-(vy,vy+1) Calculates -(v0,v1) and stores the result into
(v2,v3)
81 int-to-long vx, vy Converts the 8106 - int-to-long v6, v0
integer in vy into a Converts an integer in v0 into a long in v6,v7.
long in vx,vx+1.
82 int-to-float vx, vy Converts the 8206 - int-to-float v6, v0
integer in vx into a Converts the integer in v0 into a float in v6.
float in vx.
83 int-to-double vx, vy Converts the 8306 - int-to-double v6, v0
integer in vy into Converts the integer in v0 into a double in v6,v7
the double in
vx,vx+1.
84 long-to-int vx,vy Converts the long 8424 - long-to-int v4, v2
value in vy,vy+1 into Converts the long value in v2,v3 into an integer
an integer in vx. value in v4.
85 long-to-float vx, vy Converts the long 8510 - long-to-float v0, v1
value in vy,vy+1 into Convcerts the long value in v1,v2 into a float value
a float in vx. in v0.
86 long-to-double vx, vy Converts the long 8610 - long-to-double v0, v1
value in vy,vy+1 into Converts the long value in v1,v2 into a double
a double value in value in v0,v1.
vx,vx+1.
87 float-to-int vx, vy Converts the float 8730 - float-to-int v0, v3
value in vy into an Converts the float value in v3 into an integer value
integer value in vx. in v0.
88 float-to-long vx,vy Converts the float 8830 - float-to-long v0, v3
value in vy into a Converts the float value in v3 into a long value in
long value in vx. v0,v1.
89 float-to-double vx, vy Converts the float 8930 - float-to-double v0, v3
value in vy into a Converts the float value in v3 into a double value
double value in in v0,v1.
vx,vx+1.
8A double-to-int vx, vy Converts the 8A40 - double-to-int v0, v4
double value in Converts the double value in v4,v5 into an integer
vy,vy+1 into an value in v0.
integer value in vx.
8B double-to-long vx, vy Converts the 8B40 - double-to-long v0, v4
double value in Converts the double value in v4,v5 into a long
vy,vy+1 into a long value in v0,v1.
value in vx,vx+1.
8C double-to-float vx, vy Converts the 8C40 - double-to-float v0, v4
double value in Converts the double value in v4,v5 into a float
vy,vy+1 into a float value in v0,v1.
value in vx.
8D int-to-byte vx,vy Converts the int 8D00 - int-to-byte v0, v0
value in vy to a byte Converts the integer in v0 into a byte and puts the
value and stores it byte value into v0.
in vx.
8E int-to-char vx,vy Converts the int 8E33 - int-to-char v3, v3
value in vy to a char Converts the integer in v3 into a char and puts the
value and stores it char value into v3.
in vx.
8F int-to-short vx,vy Converts the int 8F00 - int-to-short v0, v0
value in vy to a Converts the integer in v0 into a short and puts
short value and the short value into v3.
stores it in vx.
90 add-int vx,vy,vz Calculates vy+vz 9000 0203 - add-int v0, v2, v3
and puts the result Adds v3 to v2 and puts the result into v04.
into vx.
91 sub-int vx,vy,vz Calculates vy-vz 9100 0203 - sub-int v0, v2, v3
and puts the result Subtracts v3 from v2 and puts the result into v0.
into vx.
92 mul-int vx, vy, vz Multiplies vz with 9200 0203 - mul-int v0,v2,v3
wy and puts the Multiplies v2 with w3 and puts the result into v0
result int vx.
93 div-int vx,vy,vz Divides vy with vz 9303 0001 - div-int v3, v0, v1
and puts the result Divides v0 with v1 and puts the result into v3.
into vx.
94 rem-int vx,vy,vz Calculates vy % vz 9400 0203 - rem-int v0, v2, v3
and puts the result Calculates v3 % v2 and puts the result into v0.
into vx.
95 and-int vx, vy, vz Calculates vy AND 9503 0001 - and-int v3, v0, v1
vz and puts the Calculates v0 AND v1 and puts the result into v3.
result into vx.
96 or-int vx, vy, vz Calculates vy OR vz 9603 0001 - or-int v3, v0, v1
and puts the result Calculates v0 OR v1 and puts the result into v3.
into vx.
97 xor-int vx, vy, vz Calculates vy XOR 9703 0001 - xor-int v3, v0, v1
vz and puts the Calculates v0 XOR v1 and puts the result into v3.
result into vx.
98 shl-int vx, vy, vz Shift vy left by the 9802 0001 - shl-int v2, v0, v1
positions specified Shift v0 left by the positions specified by v1 and
by vz and store the store the result in v2.
result into vx.
99 shr-int vx, vy, vz Shift vy right by the 9902 0001 - shr-int v2, v0, v1
positions specified Shift v0 right by the positions specified by v1 and
by vz and store the store the result in v2.
result into vx.
9A ushr-int vx, vy, vz Unsigned shift right 9A02 0001 - ushr-int v2, v0, v1
(>>>) vy by the Unsigned shift v0 right by the positions specified
positions specified by v1 and store the result in v2.
by vz and store the
result into vx.
9B add-long vx, vy, vz Adds vy to vz and 9B00 0305 - add-long v0, v3, v5
puts the result into The long value in v3,v4 is added to the value in
vx1. v5,v6 and the result is stored in v0,v1.
9C sub-long vx,vy,vz Calculates vy-vz 9C00 0305 - sub-long v0, v3, v5
and puts the result Subtracts the long value in v5,v6 from the long
into vx1. value in v3,v4 and puts the result into v0,v1.
9D mul-long vx,vy,vz Calculates vy*vz 9D00 0305 - mul-long v0, v3, v5
and puts the result Multiplies the long value in v5,v6 with the long
into vx1. value in v3,v4 and puts the result into v0,v1.
9E div-long vx, vy, vz Calculates vy/vz 9E06 0002 - div-long v6, v0, v2
and puts the result Divides the long value in v0,v1 with the long value
into vx1. in v2,v3 and pust the result into v6,v7.
9F rem-long vx,vy,vz Calculates vy % vz 9F06 0002 - rem-long v6, v0, v2
and puts the result Calculates v0,v1 % v2,v3 and puts the result into
into vx1. v6,v7.
A0 and-long vx, vy, vz Calculates the vy A006 0002 - and-long v6, v0, v2
AND vz and puts Calculates v0,v1 AND v2,v3 and puts the result
the result into vx1. into v6,v7.
A1 or-long vx, vy, vz Calculates the vy A106 0002 - or-long v6, v0, v2
OR vz and puts the Calculates v0,v1 OR v2,v3 and puts the result into
result into vx1. v6,v7.
A2 xor-long vx, vy, vz Calculates the vy A206 0002 - xor-long v6, v0, v2
XOR vz and puts Calculates v0,v1 XOR v2,v3 and puts the result
the result into vx1. into v6,v7.
A3 shl-long vx, vy, vz Shifts left vy by vz A302 0004 - shl-long v2, v0, v4
positions and Shift v0,v1 by postions specified by v4 and puts
stores the result in the result into v2,v3.
vx1.
A4 shr-long vx,vy,vz Shifts right vy by vz A402 0004 - shr-long v2, v0, v4
positions and Shift v0,v1 by postions specified by v4 and puts
stores the result in the result into v2,v3.
vx1.
A5 ushr-long vx, vy, vz Unsigned shifts A502 0004 - ushr-long v2, v0, v4
right vy by vz Unsigned shift v0,v1 by postions specified by v4
positions and and puts the result into v2,v3.
stores the result in
vx1.
A6 add-float vx,vy,vz Adds vy to vz and A600 0203 - add-float v0, v2, v3
puts the result into Adds the floating point numbers in v2 and v3 and
vx. puts the result into v0.
A7 sub-float vx,vy,vz Calculates vy-vz A700 0203 - sub-float v0, v2, v3
and puts the result Calculates v2-v3 and puts the result into v0.
into vx.
A8 mul-float vx, vy, vz Multiplies vy with A803 0001 - mul-float v3, v0, v1
vz and puts the Multiplies v0 with v1 and puts the result into v3.
result into vx.
A9 div-float vx, vy, vz Calculates vy/vz A903 0001 - div-float v3, v0, v1
and puts the result Divides v0 with v1 and puts the result into v3.
into vx.
AA rem-float vx,vy,vz Calculates vy % vz AA03 0001 - rem-float v3, v0, v1
and puts the result Calculates v0 % v1 and puts the result into v3.
into vx.
AB add-double vx,vy,vz Adds vy to vz and AB00 0305 - add-double v0, v3, v5
puts the result into Adds the double value in v5,v6 registers to the
vx1. double value in v3,v4 registers and places the
result in v0,v1 registers.
AC sub-double vx,vy,vz Calculates vy-vz AC00 0305 - sub-double v0, v3, v5
and puts the result Subtracts the value in v5,v6 from the value in
into vx1. v3,v4 and puts the result into v0,v1.
AD mul-double vx, vy, vz Multiplies vy with AD06 0002 - mul-double v6, v0, v2
vz and puts the Multiplies the double value in v0,v1 with the
result into vx1. double value in v2,v3 and puts the result into
v6,v7.
AE div-double vx, vy, vz Calculates vy/vz AE06 0002 - div-double v6, v0, v2
and puts the result Divides the double value in v0,v1 with the double
into vx1. value in v2,v3 and puts the result into v6,v7.
AF rem-double vx,vy,vz Calculates vy % vz AF06 0002 - rem-double v6, v0, v2
and puts the result Calculates v0,v1 % v2,v3 and puts the result into
into vx1. v6,v7.
B0 add-int/2addr vx,vy Adds vy to vx. B010 - add-int/2addr v0,v1
Adds v1 to v0.
B1 sub-int/2addr vx,vy Calculates vx-vy B140 - sub-int/2addr v0, v4
and puts the result Subtracts v4 from v0 and puts the result into v0.
into vx.
B2 mul-int/2addr vx,vy Multiplies vx with B210 - mul-int/2addr v0, v1
vy. Multiples v0 with v1 and puts the result into v0.
B3 div-int/2addr vx,vy Divides vx with vy B310 - div-int/2addr v0, v1
and puts the result Divides v0 with v1 and puts the result into v0.
into vx.
B4 rem-int/2addr vx,vy Calculates vx % vy B410 - rem-int/2addr v0, v1
and puts the result Calculates v0 % v1 and puts the result into v0.
into vx
B5 and-int/2addr vx, vy Calculates vx AND B510 - and-int/2addr v0, v1
vy and puts the Calculates v0 AND v1 and puts the result into v0.
result into vx.
B6 or-int/2addr vx, vy Calculates vx OR vy B610 - or-int/2addr v0, v1
and puts the result Calculates v0 OR v1 and puts the result into v0.
into vx.
B7 xor-int/2addr vx, vy Calculates vx XOR B710 - xor-int/2addr v0, v1
vy and puts the Calculates v0 XOR v1 and puts the result into v0.
result into vx.
B8 shl-int/2addr vx, vy Shifts vx left by vy B810 - shl-int/2addr v0, v1
positions. Shift v0 left by v1 positions.
B9 shr-int/2addr vx, vy Shifts vx right by vy B910 - shr-int/2addr v0, v1
positions. Shift v0 right by v1 positions.
BA ushr-int/2addr vx, vy Unsigned shift right BA10 - ushr-int/2addr v0, v1
(>>>) vx by the Unsigned shift v0 by the positions specified by v1.
positions specified
by vy.
BB add-long/2addr vx,vy Adds vy to vx1. BB20 - add-long/2addr v0, v2
Adds the long value in v2,v3 registers to the long
value in v0,v1 registers.
BC sub-long/2addr vx,vy Calculates vx-vy BC70 - sub-long/2addr v0, v7
and puts the result Subtracts the long value in v7,v8 from the long
into vx1. value in v0,v1 and puts the result into v0,v1.
BD mul-long/2addr vx,vy Calculates vx*vy BD70 - mul-long/2addr v0, v7
and puts the result Multiplies the long value in v7,v8 with the long
into vx1. value in v0,v1 and puts the result into v0,v1.
BE div-long/2addr vx, vy Calculates vx/vy BE20 - div-long/2addr v0, v2
and puts the result Divides the long value in v0,v1 with the long value
into vx1. in v2,v3 and puts the result into v0,v1
BF rem-long/2addr vx,vy Calculates vx % vy BF20 - rem-long/2addr v0, v2
and puts the result Calculates v0,v1 % v2,v3 and puts the result into
into vx1. v0,v1
C0 and-long/2addr vx, vy Calculates vx AND C020 - and-long/2addr v0, v2
vy and puts the Calculates v0,v1 OR v2,v3 and puts the result into
result into vx1. v0,v1.
C1 or-long/2addr vx, vy Calculates vx OR vy C120 - or-long/2addr v0, v2
and puts the result Calculates v0,v1 OR v2,v3 and puts the result into
into vx1. v0,v1.
C2 xor-long/2addr vx, vy Calculates vx XOR C220 - xor-long/2addr v0, v2
vy and puts the Calculates v0,v1 XOR v2,v3 and puts the result
result into vx1. into v0,v1.
C3 shl-long/2addr vx, vy Shifts left the value C320 - shl-long/2addr v0, v2
in vx,vx+1 by the Shifts left v0,v1 by the positions specified by v2.
positions specified
by vy and stores the
result in vx,vx+1.
C4 shr-long/2addr vx, vy Shifts right the C420 - shr-long/2addr v0, v2
value in vx,vx+1 by Shifts right v0,v1 by the positions specified by v2.
the positions
specified by vy and
stores the result in
vx,vx+1.
C5 ushr-long/2addr vx, vy Unsigned shifts C520 - ushr-long/2addr v0, v2
right the value in Unsigned shifts right v0,v1 by the positions
vx,vx+1 by the specified by v2.
positions specified
by vy and stores the
result in vx,vx+1.
C6 add-float/2addr vx,vy Adds vy to vx. C640 - add-float/2addr v0,v4
Adds v4 to v0.
C7 sub-float/2addr vx,vy Calculates vx-vy C740 - sub-float/2addr v0,v4
and stores the Adds v4 to v0.
result in vx.
C8 mul-float/2addr vx, vy Multiplies vx with C810 - mul-float/2addr v0, v1
vy. Multiplies v0 with v1.
C9 div-float/2addr vx, vy Calculates vx/vy C910 - div-float/2addr v0, v1
and puts the result Divides v0 with v1 and puts the result into v0.
into vx.
CA rem-float/2addr vx,vy Calculates vx/vy CA10 - rem-float/2addr v0, v1
and puts the result Calculates v0 % v1 and puts the result into v0.
into vx.
CB add-double/2addr vx, vy Adds vy to vx1. CB70 - add-double/2addr v0, v7
Adds v7 to v0.
CC sub-double/2addr vx, vy Calculates vx-vy CC70 - sub-double/2addr v0, v7
and puts the result Subtracts the value in v7,v8 from the value in
into vx1. v0,v1 and puts the result into v0,v1.
CD mul-double/2addr vx, vy Multiplies vx with CD20 - mul-double/2addr v0, v2
vy1. Multiplies the double value in v0,v1 with the
double value in v2,v3 and puts the result into
v0,v1.
CE div-double/2addr vx, vy Calculates vx/vy CE20 - div-double/2addr v0, v2
and puts the result Divides the double value in v0,v1 with the double
into vx1. value in v2,v3 and puts the value into v0,v1.
CF rem-double/2addr vx,vy Calculates vx % vy CF20 - rem-double/2addr v0, v2
and puts the result Calculates v0,v1 % v2,v3 and puts the value into
into vx1. v0,v1.
D0 add-int/lit16 vx,vy,lit16 Adds vy to lit16 and D001 D204 - add-int/lit16 v1, v0, #int 1234 //
stores the result #04d2
into vx. Adds v0 to literal 1234 and stores the result into
v1.
D1 sub-int/lit16 vx,vy,lit16 Calculates vy - lit16 D101 D204 - sub-int/lit16 v1, v0, #int 1234 //
and stores the #04d2
result into vx. Calculates v0 - literal 1234 and stores the result
into v1.
D2 mul-int/lit16 vx,vy,lit16 Calculates vy * lit16 D201 D204 - mul-int/lit16 v1, v0, #int 1234 //
and stores the #04d2
result into vx. Calculates v0 * literal 1234 and stores the result
into v1.
D3 div-int/lit16 vx,vy,lit16 Calculates vy / lit16 D301 D204 - div-int/lit16 v1, v0, #int 1234 //
and stores the #04d2
result into vx. Calculates v0 / literal 1234 and stores the result
into v1.
D4 rem-int/lit16 vx,vy,lit16 Calculates vy % D401 D204 - rem-int/lit16 v1, v0, #int 1234 //
lit16 and stores the #04d2
result into vx. Calculates v0 % literal 1234 and stores the result
into v1.
D5 and-int/lit16 vx,vy,lit16 Calculates vy AND D501 D204 - and-int/lit16 v1, v0, #int 1234 //
lit16 and stores the #04d2
result into vx. Calculates v0 AND literal 1234 and stores the
result into v1.
D6 or-int/lit16 vx,vy,lit16 Calculates vy OR D601 D204 - or-int/lit16 v1, v0, #int 1234 // #04d2
lit16 and stores the Calculates v0 OR literal 1234 and stores the result
result into vx. into v1.
D7 xor-int/lit16 vx,vy,lit16 Calculates vy XOR D701 D204 - xor-int/lit16 v1, v0, #int 1234 //
lit16 and stores the #04d2
result into vx. Calculates v0 XOR literal 1234 and stores the
result into v1.
D8 add-int/lit8 vx,vy,lit8 Adds vy to lit8 and D800 0201 - add-int/lit8 v0,v2, #int1
stores the result Adds literal 1 to v2 and stores the result into v0.
into vx.
D9 sub-int/lit8 vx,vy,lit8 Calculates vy-lit8 D900 0201 - sub-int/lit8 v0,v2, #int1
and stores the Calculates v2-1 and stores the result into v0.
result into vx.
DA mul-int/lit8 vx,vy,lit8 Multiplies vy with DA00 0002 - mul-int/lit8 v0,v0, #int2
lit8 8-bit literal Multiplies v0 with literal 2 and puts the result into
constant and puts v0.
the result into vx.
DB div-int/lit8 vx,vy,lit8 Calculates vy/lit8 DB00 0203 - mul-int/lit8 v0,v2, #int3
and stores the Calculates v2/3 and stores the result into v0.
result into vx.
DC rem-int/lit8 vx,vy,lit8 Calculates vy % lit8 DC00 0203 - rem-int/lit8 v0,v2, #int3
and stores the Calculates v2 % 3 and stores the result into v0.
result into vx.
DD and-int/lit8 vx,vy,lit8 Calculates vy AND DD00 0203 - and-int/lit8 v0,v2, #int3
lit8 and stores the Calculates v2 AND 3 and stores the result into v0.
result into vx.
DE or-int/lit8 vx, vy, lit8 Calculates vy OR DE00 0203 - or-int/lit8 v0, v2, #int 3
lit8 and puts the Calculates v2 OR literal 3 and puts the result into
result into vx. v0.
DF xor-int/lit8 vx, vy, lit8 Calculates vy XOR DF00 0203 | 0008: xor-int/lit8 v0, v2, #int 3
lit8 and puts the Calculates v2 XOR literal 3 and puts the result into
result into vx. v0.
E0 shl-int/lit8 vx, vy, lit8 Shift v0 left by the E001 0001 - shl-int/lit8 v1, v0, #int 1
bit positions Shift v0 left by 1 position and put the result into
specified by the v1.
literal constant and
put the result into
vx.
E1 shr-int/lit8 vx, vy, lit8 Shift v0 right by the E101 0001 - shr-int/lit8 v1, v0, #int 1
bit positions Shift v0 right by 1 position and put the result into
specified by the v1.
literal constant and
put the result into
vx.
E2 ushr-int/lit8 vx, vy, lit8 Unsigned right shift E201 0001 - ushr-int/lit8 v1, v0, #int 1
of v0 (>>>) by the Unsigned shift v0 right by 1 position and put the
bit positions result into v1.
specified by the
literal constant and
put the result into
vx.
E3 unused_E3
E4 unused_E4
E5 unused_E5
E6 unused_E6
E7 unused_E7
E8 unused_E8
E9 unused_E9
EA unused_EA
EB unused_EB
EC unused_EC
ED unused_ED
EE execute-inline Executes the inline EE20 0300 0100 - execute-inline {v1, v0}, inline
{parameters},inline ID method identified #0003
by inline ID6. Executes inline method #3 using v1 as "this" and
passing one parameter in v0.
EF unused_EF
F0 invoke-direct-empty Stands as a F010 F608 0000 - invoke-direct-empty {v0},
placeholder for Ljava/lang/Object;.<init>:()V // method@08f6
pruned empty Replacement for the empty method
methods like java/lang/Object;<init>.
Object.<init>. This
acts as nop during
normal execution6.
F1 unused_F1
F2 iget-quick vx,vy,offset Gets the value F221 1000 - iget-quick v1, v2, [obj+0010]
stored at offset in Gets the value at offset 0CH of the instance
vy instance's data pointed by v2 and stores the object reference in
area to vx6. v1.
F3 iget-wide-quick Gets the object F364 3001 - iget-wide-quick v4, v6, [obj+0130]
vx,vy,offset reference value Gets the value at offset 130H of the instance
stored at offset in pointed by v6 and stores the object reference in
vy instance's data v4,v5.
area to vx,vx+16.
F4 iget-object-quick Gets the object F431 0C00 - iget-object-quick v1, v3, [obj+000c]
vx,vy,offset reference value Gets the object reference value at offset 0CH of
stored at offset in the instance pointed by v3 and stores the object
vy instance's data reference in v1.
area to vx6.
F5 iput-quick vx,vy,offset Puts the value F521 1000 - iput-quick v1, v2, [obj+0010]
stored in vx to Puts the object reference value in v1 to offset 10H
offset in vy of the instance pointed by v2.
instance's data
area6.
F6 iput-wide-quick Puts the value F652 7001 - iput-wide-quick v2, v5, [obj+0170]
vx,vy,offset stored in vx,vx+1 to Puts the value in v2,v3 to offset 170H of the
offset in vy instance pointed by v5.
instance's data
area6.
F7 iput-object-quick Puts the object F701 4C00 - iput-object-quick v1, v0, [obj+004c]
vx,vy,offset reference value Puts the object reference value in v1 to offset
stored in vx to 0CH of the instance pointed by v3.
offset in vy
instance's data area
to vx6.
F8 invoke-virtual-quick Invokes a virtual F820 B800 CF00 - invoke-virtual-quick {v15, v12},
{parameters},vtable offset method using the vtable #00b8
vtable of the target Invokes a virtual method. The target object
object6. instance is pointed by v15 and vtable entry #B8
points to the method to be called. v12 is a
parameter to the method call.
F9 invoke-virtual-quick/range Invokes a virtual F906 1800 0000 - invoke-virtual-quick/range
{parameter range},vtable method using the {v0..v5},vtable #0018
offset vtable of the target Invokes a method using the vtable of the instance
object6 pointed by v0. v1..v5 registers are parameters to
the method call.
FA invoke-super-quick Invokes a virtual FA40 8100 3254 - invoke-super-quick {v2, v3, v4,
{parameters},vtable offset method in the v5}, vtable #0081
target object's Invokes a method using the vtable of the
immediate parent immediate parent class of instance pointed by v2.
class using the v3, v4 and v5 registers are parameters to the
vtable of that method call.
parent class6.
FB invoke-super-quick/range Invokes a virtual F906 1B00 0000 - invoke-super-quick/range
{register range},vtable method in the {v0..v5}, vtable #001b
offset target object's Invokes a method using the vtable of the
immediate parent immediate parent class of instance pointed by v0.
class using the v1..v5 registers are parameters to the method
vtable of that call.
parent class6.
FC unused_FC
FD unused_FD
FE unused_FE
FF unused_FF

1. Note that double and long values occupy two registers (e.g. the value addressed by vy is located in vy
and vy+1 registers)
2. The offset can be positive or negative and it is calculated from the offset of the starting byte of the
instruction. The offset is always interpreted in words (2 bytes per 1 offset value increment/decrement).
Negative offset is stored in two's complement format. The current position is the offset of the starting
byte of the instruction.
3. Compare operations returrn positive value if the first operand is greater than the second operand, 0 if
they are equal and negative value if the first operand is smaller than the second operand.
4. Not seen in the wild, interpolated from Dalvik bytecode list.
5. The invocation parameter list encoding is somewhat weird. Starting if parameter number > 4 and
parameter number % 4 == 1, the 5th (9th, etc.) parameter is encoded on the 4 lowest bit of the byte
immediately following the instruction. Curiously, this encoding is not used in case of 1 parameter, in
this case an entire 16 bit word is added after the method index of which only 4 bit is used to encode
the single parameter while the lowest 4 bit of the byte following the instruction byte is left unused.
6. This is an unsafe instruction and occurs only in ODEX files.

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy