Files
sigmaker-ida/idasdk75/module/java/ins.hpp
2021-06-05 21:10:25 +03:00

269 lines
14 KiB
C++

/*
* Interactive disassembler (IDA)
* Copyright (c) 1990-2020 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_null = 0, // Unknown Operation
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