268 lines
13 KiB
C++
268 lines
13 KiB
C++
/*
|
|
* Interactive disassembler (IDA)
|
|
* Copyright (c) 1990-2021 Hex-Rays
|
|
* JVM module.
|
|
* Copyright (c) 1995-2006 by Iouri Kharon.
|
|
* E-mail: yjh@styx.cabel.net
|
|
*
|
|
* ALL RIGHTS RESERVED.
|
|
*
|
|
*/
|
|
|
|
#ifndef __INSTRS_HPP
|
|
#define __INSTRS_HPP
|
|
|
|
|
|
extern const instruc_t Instructions[];
|
|
enum nameNum ENUM_SIZE(uint16)
|
|
{
|
|
j_nop = 0, // 0 Do nothing
|
|
j_aconst_null, // 1 Push null object reference
|
|
j_iconst_m1, // 2 Push integer constant -1
|
|
j_iconst_0, // 3 Push the integer 0
|
|
j_iconst_1, // 4 Push the integer 1
|
|
j_iconst_2, // 5 Push the integer 2
|
|
j_iconst_3, // 6 Push the integer 3
|
|
j_iconst_4, // 7 Push the integer 4
|
|
j_iconst_5, // 8 Push the integer 5
|
|
j_lconst_0, // 9 Push the long integer 0
|
|
j_lconst_1, // 10 Push the long integer 1
|
|
j_fconst_0, // 11 Push the single-precision foating point 0.0
|
|
j_fconst_1, // 12 Push the single-precision foating point 1.0
|
|
j_fconst_2, // 13 Push the single-precision foating point 2.0
|
|
j_dconst_0, // 14 Push the double-precision foating point 2.0
|
|
j_dconst_1, // 15 Push the double-precision foating point 2.0
|
|
j_bipush, // 16 Push one byte signed integer
|
|
j_sipush, // 17 Push two-byte signed integer
|
|
j_ldc, // 18 Push item from constant pool (i1)
|
|
j_ldcw, // 19 Push item from constant pool (i2)
|
|
j_ldc2w, // 20 Push long or double from constant pool
|
|
j_iload, // 21 Push integer value of the local variable
|
|
j_lload, // 22 Push long value of the local variable
|
|
j_fload, // 23 Push single float value of the local variable
|
|
j_dload, // 24 Push double float value of the local variable
|
|
j_aload, // 25 Push object reference from the local variable
|
|
j_iload_0, // 26 Push integer value of the local variable #0
|
|
j_iload_1, // 27 Push integer value of the local variable #1
|
|
j_iload_2, // 28 Push integer value of the local variable #2
|
|
j_iload_3, // 29 Push integer value of the local variable #3
|
|
j_lload_0, // 30 Push long value of the local variable #0
|
|
j_lload_1, // 31 Push long value of the local variable #1
|
|
j_lload_2, // 32 Push long value of the local variable #2
|
|
j_lload_3, // 33 Push long value of the local variable #3
|
|
j_fload_0, // 34 Push single float value of the local variable #0
|
|
j_fload_1, // 35 Push single float value of the local variable #1
|
|
j_fload_2, // 36 Push single float value of the local variable #2
|
|
j_fload_3, // 37 Push single float value of the local variable #3
|
|
j_dload_0, // 38 Push double float value of the local variable #0
|
|
j_dload_1, // 39 Push double float value of the local variable #1
|
|
j_dload_2, // 40 Push double float value of the local variable #2
|
|
j_dload_3, // 41 Push double float value of the local variable #3
|
|
j_aload_0, // 42 Push object reference from the local variable #0
|
|
j_aload_1, // 43 Push object reference from the local variable #1
|
|
j_aload_2, // 44 Push object reference from the local variable #2
|
|
j_aload_3, // 45 Push object reference from the local variable #3
|
|
j_iaload, // 46 Push integer from array
|
|
j_laload, // 47 Push long from array
|
|
j_faload, // 48 Push single float from array
|
|
j_daload, // 49 Push double float from array
|
|
j_aaload, // 50 Push object refernce from array
|
|
j_baload, // 51 Push signed byte from array
|
|
j_caload, // 52 Push character from array
|
|
j_saload, // 53 Push short from array
|
|
j_istore, // 54 Pop integer value into local variable
|
|
j_lstore, // 55 Pop long value into local variable
|
|
j_fstore, // 56 Pop single float value into local variable
|
|
j_dstore, // 57 Pop double float value into local variable
|
|
j_astore, // 58 Pop object refernce into local variable
|
|
j_istore_0, // 59 Pop integer value into local variable #0
|
|
j_istore_1, // 60 Pop integer value into local variable #1
|
|
j_istore_2, // 61 Pop integer value into local variable #2
|
|
j_istore_3, // 62 Pop integer value into local variable #3
|
|
j_lstore_0, // 63 Pop long value into local variable #0
|
|
j_lstore_1, // 64 Pop long value into local variable #1
|
|
j_lstore_2, // 65 Pop long value into local variable #2
|
|
j_lstore_3, // 66 Pop long value into local variable #3
|
|
j_fstore_0, // 67 Pop single float value into local variable #0
|
|
j_fstore_1, // 68 Pop single float value into local variable #1
|
|
j_fstore_2, // 69 Pop single float value into local variable #2
|
|
j_fstore_3, // 70 Pop single float value into local variable #3
|
|
j_dstore_0, // 71 Pop double float value into local variable
|
|
j_dstore_1, // 72 Pop double float value into local variable #0
|
|
j_dstore_2, // 73 Pop double float value into local variable #1
|
|
j_dstore_3, // 74 Pop double float value into local variable #2
|
|
j_astore_0, // 75 Pop object refernce into local variable #0
|
|
j_astore_1, // 76 Pop object refernce into local variable #1
|
|
j_astore_2, // 77 Pop object refernce into local variable #2
|
|
j_astore_3, // 78 Pop object refernce into local variable #3
|
|
j_iastore, // 79 Pop integer from array
|
|
j_lastore, // 80 Pop long from array
|
|
j_fastore, // 81 Pop single float from array
|
|
j_dastore, // 82 Pop double float from array
|
|
j_aastore, // 83 Pop object refernce from array
|
|
j_bastore, // 84 Pop signed byte from array
|
|
j_castore, // 85 Pop character from array
|
|
j_sastore, // 86 Pop short from array
|
|
j_pop, // 87 Pop top stack word
|
|
j_pop2, // 88 Pop top two stack word
|
|
j_dup, // 89 Duplicate top stack word
|
|
j_dup_x1, // 90 Duplicate top stack word and put two down
|
|
j_dup_x2, // 91 Duplicate top stack word and put three down
|
|
j_dup2, // 92 Duplicate top two stack word
|
|
j_dup2_x1, // 93 Duplicate top two stack words and put two down
|
|
j_dup2_x2, // 94 Duplicate top two stack words and put three down
|
|
j_swap, // 95 Swap two top stack words
|
|
j_iadd, // 96 Integer add
|
|
j_ladd, // 97 Long add
|
|
j_fadd, // 98 Single float add
|
|
j_dadd, // 99 Double float add
|
|
j_isub, // 100 Integer subtract
|
|
j_lsub, // 101 Long subtract
|
|
j_fsub, // 102 Single float subtract
|
|
j_dsub, // 103 Double Float subtract
|
|
j_imul, // 104 Integer multiply
|
|
j_lmul, // 105 Long multiply
|
|
j_fmul, // 106 Single float multiply
|
|
j_dmul, // 107 Double Float multiply
|
|
j_idiv, // 108 Integer divide
|
|
j_ldiv, // 109 Long divide
|
|
j_fdiv, // 110 Single float divide
|
|
j_ddiv, // 111 Double Float divide
|
|
j_irem, // 112 Integer reminder
|
|
j_lrem, // 113 Long reminder
|
|
j_frem, // 114 Single float reminder
|
|
j_drem, // 115 Double Float reminder
|
|
j_ineg, // 116 Integer negate
|
|
j_lneg, // 117 Long negate
|
|
j_fneg, // 118 Single float negate
|
|
j_dneg, // 119 Double Float negate
|
|
j_ishl, // 120 Integer shift left
|
|
j_lshl, // 121 Long shift left
|
|
j_ishr, // 122 Integer logical shift right
|
|
j_lshr, // 123 Long logical shift right
|
|
j_iushr, // 124 Integer arithmetic shift right
|
|
j_lushr, // 125 Long arithmeticshift right
|
|
j_iand, // 126 Integer boolean AND
|
|
j_land, // 127 Long boolean AND
|
|
j_ior, // 128 Integer boolean OR
|
|
j_lor, // 129 Long boolean OR
|
|
j_ixor, // 130 Integer boolean XOR
|
|
j_lxor, // 131 Long boolean XOR
|
|
j_iinc, // 132 Add 8-bit signed const to local variable
|
|
j_i2l, // 133 Integer to Long conversion
|
|
j_i2f, // 134 Integer to single float conversion
|
|
j_i2d, // 135 Integer to double float conversion
|
|
j_l2i, // 136 Long to Integer conversion
|
|
j_l2f, // 137 Long to single float conversion
|
|
j_l2d, // 138 Long to double float conversion
|
|
j_f2i, // 139 Single float to Integer conversion
|
|
j_f2l, // 140 Single float to Long conversion
|
|
j_f2d, // 141 Single float to double float conversion
|
|
j_d2i, // 142 Double float to Integer conversion
|
|
j_d2l, // 143 Double float to Long conversion
|
|
j_d2f, // 144 Double float to double float conversion
|
|
j_i2b, // 145 Integer to signed byte conversion
|
|
j_i2c, // 146 Integer to unsigned short conversion
|
|
j_i2s, // 147 Integer to signed short conversion
|
|
j_lcmp, // 148 Long compare
|
|
j_fcmpl, // 149 Single float compare (-1 on NaN)
|
|
j_fcmpg, // 150 Single float compare (1 on NaN)
|
|
j_dcmpl, // 151 Double float compare (-1 on NaN)
|
|
j_dcmpg, // 152 Double float compare (1 on NaN)
|
|
j_ifeq, // 153 Branch if equal to 0
|
|
j_ifne, // 154 Branch if not equal to 0
|
|
j_iflt, // 155 Branch if less then 0
|
|
j_ifge, // 156 Branch if greater than or equal to 0
|
|
j_ifgt, // 157 Branch if greater than 0
|
|
j_ifle, // 158 Branch if less than or equal to 0
|
|
j_if_icmpeq, // 159 Branch if integers equal
|
|
j_if_icmpne, // 160 Branch if integers not equal
|
|
j_if_icmplt, // 161 Branch if integers less than
|
|
j_if_icmpge, // 162 Branch if integers grater than or equal to
|
|
j_if_icmpgt, // 163 Branch if integers grater than
|
|
j_if_icmple, // 164 Branch if integers less than or equal to
|
|
j_if_acmpeq, // 165 Branch if object references are equal
|
|
j_if_acmpne, // 166 Branch if object references not equal
|
|
j_goto, // 167 Branch always
|
|
j_jsr, // 168 Jump subroutine
|
|
j_ret, // 169 Return from subroutine
|
|
j_tableswitch, // 170 Access jump table by index and jump
|
|
j_lookupswitch, // 171 Access jump table by key match and jump
|
|
j_ireturn, // 172 Return integer from function
|
|
j_lreturn, // 173 Return long from function
|
|
j_freturn, // 174 Return single floatr from function
|
|
j_dreturn, // 175 Return double float from function
|
|
j_areturn, // 176 Return object reference from function
|
|
j_return, // 177 Return (void) from procedure
|
|
j_getstatic, // 178 Set static field from class
|
|
j_putstatic, // 179 Set static field in class
|
|
j_getfield, // 180 Fetch field from object
|
|
j_putfield, // 181 Set field in object
|
|
j_invokevirtual, // 182 invoke instance method
|
|
j_invokespecial, // 183 invoke instance method (superclass/init/...)
|
|
j_invokestatic, // 184 invoke a class (static) method
|
|
j_invokeinterface,// 185 invoke interface method
|
|
j_invokedynamic, // 186 invoke instance method (select by paraneter)
|
|
j_new, // 187 Create new object
|
|
j_newarray, // 188 Allocate new array
|
|
j_anewarray, // 189 Allocate new array of refernces to object
|
|
j_arraylength, // 190 Get length of array
|
|
j_athrow, // 191 Throw exception or error
|
|
j_checkcast, // 192 Make sure object is of given type
|
|
j_instanceof, // 193 Determine if an object is of given type
|
|
j_monitorenter, // 194 Enter monitored region of code
|
|
j_monitorexit, // 195 Exit monitored region of code
|
|
j_wide, // 196 wide (prefix of command)
|
|
j_multianewarray, // 197 Allocate new multi-dimensional array
|
|
j_ifnull, // 198 Branch if NULL-ptr
|
|
j_ifnonnull, // 199 Branch if not NULL-ptr
|
|
j_goto_w, // 200 Branch always (wide index)
|
|
j_jsr_w, // 201 Jump subroutine (wide index)
|
|
j_breakpoint, // 202 Stop and pass control to breakpoint handler
|
|
//
|
|
j_lastnorm,
|
|
j_a_invokesuper = j_lastnorm,
|
|
j_a_invokevirtualobject,
|
|
j_a_invokeignored,
|
|
// bottom of table ! (emu)
|
|
j_a_software,
|
|
j_a_hardware,
|
|
//
|
|
j_last
|
|
};
|
|
|
|
enum name_quick
|
|
{
|
|
j_ldc_quick = j_lastnorm, // 203 (18)
|
|
j_ldcw_quick, // 204 (19)
|
|
j_ldc2w_quick, // 205 (20)
|
|
j_getfield_quick, // 206 (180)
|
|
j_putfield_quick, // 207 (181)
|
|
j_getfield2_quick, // 208
|
|
j_putfield2_quick, // 209
|
|
j_getstatic_quick, // 210 (178)
|
|
j_putstatic_quick, // 211 (179)
|
|
j_getstatic2_quick, // 212
|
|
j_putstatic2_quick, // 213
|
|
j_invokevirtual_quick, // 214 (182)
|
|
j_invokenonvirtual_quick, // 215 (183)
|
|
j_invokesuper_quick, // 216
|
|
j_invokestatic_quick, // 217 (184)
|
|
j_invokeinterface_quick, // 218 (185)
|
|
j_invokevirtualobject_quick, // 219
|
|
j_invokeignored_quick, // 220
|
|
j_new_quick, // 221 (187)
|
|
j_anewarray_quick, // 222 (189)
|
|
j_multianewarray_quick, // 223 (197)
|
|
j_checkcast_quick, // 224 (192)
|
|
j_instanceof_quick, // 225 (193)
|
|
j_invokevirtual_quick_w, // 226
|
|
j_getfield_quick_w, // 227
|
|
j_putfield_quick_w, // 228
|
|
j_quick_last
|
|
};
|
|
|
|
#define j_software 254
|
|
#define j_hardware 255
|
|
#endif
|