diff --git a/jode/jode/jvm/Interpreter.j b/jode/jode/jvm/Interpreter.j deleted file mode 100644 index 7355a90..0000000 --- a/jode/jode/jvm/Interpreter.j +++ /dev/null @@ -1,1901 +0,0 @@ -; Interpreter Copyright (C) 1999 Jochen Hoenicke. -; -; This program is free software; you can redistribute it and/or modify -; it under the terms of the GNU General Public License as published by -; the Free Software Foundation; either version 2, or (at your option) -; any later version. -; -; This program is distributed in the hope that it will be useful, -; but WITHOUT ANY WARRANTY; without even the implied warranty of -; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -; GNU General Public License for more details. -; -; You should have received a copy of the GNU General Public License -; along with this program; see the file COPYING. If not, write to -; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. -; -; $Id$ - -; This class is a java virtual machine written in java :-). Well not -; exactly. It does only handle a subset of the opcodes and is mainly -; written do deobfuscate Strings. -; -; @author Jochen Hoenicke - -.class public jode/jvm/Interpreter -.super java/lang/Object -.implements jode/bytecode/Opcodes - -.method public static interpretMethod(Ljode/jvm/RuntimeEnvironment;Ljode/bytecode/BytecodeInfo;[Ljode/jvm/Value;)Ljava/lang/Object; -.throws jode/jvm/InterpreterException -.throws java/lang/reflect/InvocationTargetException - .limit locals 9 - .limit stack 10 - .catch java/lang/RuntimeException from aload_start to aload_end using wrapexception_handler - .catch java/lang/RuntimeException from aastore_start to aastore_end using wrapexception_handler - .catch java/lang/RuntimeException from zastore_start to zastore_end using wrapexception_handler - .catch java/lang/RuntimeException from bastore_start to bastore_end using wrapexception_handler - .catch java/lang/RuntimeException from sastore_start to sastore_end using wrapexception_handler - .catch java/lang/RuntimeException from castore_start to castore_end using wrapexception_handler - - .catch java/lang/ArithmeticException from idiv_start to idiv_end using wrapexception_handler - .catch java/lang/ArithmeticException from irem_start to irem_end using wrapexception_handler - .catch java/lang/ArithmeticException from ldiv_start to ldiv_end using wrapexception_handler - .catch java/lang/ArithmeticException from lrem_start to lrem_end using wrapexception_handler - .catch java/lang/NullPointerException from arrlength_start to arrlength_end using wrapexception_handler - .catch java/lang/NegativeArraySizeException from newarray_start to newarray_end using wrapexception_handler - .catch java/lang/reflect/InvocationTargetException from newinstance_start to newinstance_end using invocationtarget_handler - .catch java/lang/reflect/InvocationTargetException from invoke_start to invoke_end using invocationtarget_handler - - aload_1 - dup - invokevirtual jode/bytecode/BytecodeInfo/getMaxStack()I - dup - anewarray jode/jvm/Value - dup_x1 - astore_3 - goto initstack_enter -initstack_loop: - dup2 - new jode/jvm/Value - dup - invokenonvirtual jode/jvm/Value/()V - aastore -initstack_enter: - iconst_1 - isub - dup - ifge initstack_loop - pop2 - - invokevirtual jode/bytecode/BytecodeInfo/getInstructions()Ljava.util.List; - iconst_0 - invokevirtual java/util/List/get(I)Ljava/lang/Object; - checkcast jode/bytecode/Instruction; - astore 4 - iconst_0 - istore 5 - -; 0 == env -; 1 == code -; 2 == stack -; 3 == locals -; 4 == pc -; 5 == stacktop -big_loop: - - -; ========= DEBUGGING OUTPUT =============================== - getstatic jode/GlobalOptions/debuggingFlags I - sipush 0x400 - iand - ifeq skip_debugging - getstatic jode/GlobalOptions/err Ljava/io/PrintStream; - dup - aload 4 - invokevirtual jode/bytecode/Instruction/getDescription()Ljava/lang/String; - invokevirtual java/io/PrintStream/println(Ljava/lang/String;)V - dup - new java/lang/StringBuffer - dup - ldc "stack: [" - invokenonvirtual java/lang/StringBuffer/(Ljava/lang/String;)V -; stack contains: -; addr+": [" -; System.err -; System.err - iconst_0 - istore 6 - iload 5 ; stacktop - ifgt stackenter_1 - goto stackdone_1 - -; stringbuffer -; System.err -; System.err -stackloop_1: - ldc "," - invokevirtual java/lang/StringBuffer/append(Ljava/lang/String;)Ljava/lang/StringBuffer; -stackenter_1: - aload_3 - iload 6 - aaload - dup - invokevirtual jode/jvm/Value/objectValue()Ljava/lang/Object; - instanceof [C - ifeq add_object - invokevirtual jode/jvm/Value/objectValue()Ljava/lang/Object; - checkcast [C - invokevirtual java/lang/StringBuffer/append([C)Ljava/lang/StringBuffer; - goto added_object -add_object: - invokevirtual java/lang/StringBuffer/append(Ljava/lang/Object;)Ljava/lang/StringBuffer; -added_object: - iinc 6 1 - iload 6 ; stackindex - iload 5 ; stacktop - if_icmplt stackloop_1 - -; stringbuffer -; System.err -stackdone_1: - ldc "]" - invokevirtual java/lang/StringBuffer/append(Ljava/lang/String;)Ljava/lang/StringBuffer; - invokevirtual java/lang/StringBuffer/toString()Ljava/lang/String; - invokevirtual java/io/PrintStream/println(Ljava/lang/String;)V - - new java/lang/StringBuffer - dup - - ldc "local: [" - invokenonvirtual java/lang/StringBuffer/(Ljava/lang/String;)V - -; stack contains: -; addr+": [" -; System.err - iconst_0 - istore 6 - aload 2 - arraylength ; maxlocals - ifgt localenter_2 - goto localdone_2 - -; stringbuffer -; System.err -localloop_2: - ldc "," - invokevirtual java/lang/StringBuffer/append(Ljava/lang/String;)Ljava/lang/StringBuffer; -localenter_2: - aload_2 - iload 6 - aaload - dup - invokevirtual jode/jvm/Value/objectValue()Ljava/lang/Object; - instanceof [C - ifeq add_object2 - invokevirtual jode/jvm/Value/objectValue()Ljava/lang/Object; - checkcast [C - invokevirtual java/lang/StringBuffer/append([C)Ljava/lang/StringBuffer; - goto added_object2 -add_object2: - invokevirtual java/lang/StringBuffer/append(Ljava/lang/Object;)Ljava/lang/StringBuffer; -added_object2: - iinc 6 1 - iload 6 ; stackindex - aload 2 - arraylength ; maxlocals - if_icmplt localloop_2 - -; stringbuffer -; System.err -localdone_2: - ldc "]" - invokevirtual java/lang/StringBuffer/append(Ljava/lang/String;)Ljava/lang/StringBuffer; - invokevirtual java/lang/StringBuffer/toString()Ljava/lang/String; - invokevirtual java/io/PrintStream/println(Ljava/lang/String;)V - -; ========= DEBUGGING OUTPUT ENDS =============================== -skip_debugging: - aload 4 - dup - astore 6 - dup - invokevirtual jode/bytecode/Instruction/getNextByAddr()Ljode/bytecode/Instruction; - astore 4 - invokevirtual jode/bytecode/Instruction/getOpcode()I -; stack: -; instr.opcode - dup - sipush 153 - if_icmpge if_or_special_instr - dup - bipush 87 - if_icmpge no_const_store_load_instr - dup - bipush 20 - if_icmpgt load_store_instr - dup - ifeq nop_instr - -; ====== LDC / LDC2_W - aload_3 ; stack - iload 5 ; stacktop - aaload - iinc 5 1 - aload 6 - invokevirtual jode/bytecode/Instruction/getConstant()Ljava/lang/Object; -; Stack: -; instr.objData -; stack_value -; opcode - invokevirtual jode/jvm/Value/setObject(Ljava/lang/Object;)V - bipush 20 ; opc_ldc2_w - if_icmpne big_loop - iinc 5 1 - goto big_loop - -illegal_instr: -nop_instr: -popI_big_loop: - pop - goto big_loop - -; ====== LOAD / STORE INSTRUCTIONS - -load_store_instr: - dup - bipush 54 - if_icmpge store_instr - dup - bipush 46 - if_icmpge array_load_instr - -; ====== LOAD INSTRUCTIONS - - aload_3 ; stack - iload 5 ; stacktop - aaload - iinc 5 1 - - aload_2 ; locals - aload 6 - invokevirtual jode/bytecode/Instruction/getLocalSlot()I - aaload - invokevirtual jode/jvm/Value/setValue(Ljode/jvm/Value;)V - - iconst_1 - iand ; opcode & 1 - ifne big_loop - iinc 5 1 - goto big_loop - -array_load_instr: - iinc 5 -1 - aload_3 - iload 5 - iconst_m1 - iadd - aaload - dup_x1 - invokevirtual jode/jvm/Value/objectValue()Ljava/lang/Object; - aload_3 - iload 5 - aaload - invokevirtual jode/jvm/Value/intValue()I -aload_start: - invokestatic java/lang/reflect/Array/get(Ljava/lang/Object;I)Ljava/lang/Object; -aload_end: -; Stack: -; element (of wrong type) -; opcode -; value (for result) - - swap - bipush 51 - if_icmplt set_object_big_loop -; Stack: -; element (of wrong type) -; value (for result) - dup - instanceof java/lang/Number - ifne number_convert - dup - instanceof java/lang/Character - ifne char_convert - -boolean_convert: - checkcast java/lang/Boolean - invokevirtual java/lang/Boolean/booleanValue()Z - goto pack_integer -char_convert: - checkcast java/lang/Character - invokevirtual java/lang/Character/charValue()C - goto pack_integer - -number_convert: - checkcast java/lang/Number - invokevirtual java/lang/Number/intValue()I -pack_integer: - new java/lang/Integer - dup_x1 - swap - invokenonvirtual java/lang/Integer/(I)V -set_object_big_loop: - invokevirtual jode/jvm/Value/setObject(Ljava/lang/Object;)V - goto big_loop - -; ====== STORE INSTRUCTIONS - -store_instr: - dup - bipush 79 - if_icmpge array_store_instr - - pop ; opcode - - aload_2 ; locals - aload 6 - invokevirtual jode/bytecode/Instruction/getLocalSlot()I - aaload - iinc 5 -1 - aload_3 ; stack - iload 5 ; stacktop - aaload - invokevirtual jode/jvm/Value/setValue(Ljode/jvm/Value;)V - goto big_loop - -array_store_instr: - - istore 7 - iinc 5 -2 - aload_3 - iload 5 - aaload - invokevirtual jode/jvm/Value/intValue()I -; stack: -; index - aload_3 - iload 5 - iconst_1 - iadd - aaload -; stack: -; store-value -; index -; swap -; dup_x1 -; invokestatic java/lang/String/valueOf(I)Ljava/lang/String; -; getstatic java/lang/System/err Ljava/io/PrintStream; -; swap -; invokevirtual java/io/PrintStream/println(Ljava/lang/String;)V - - ; work around for mysterious bug in virtual machine XXX - astore 8 - istore 6 - - iinc 5 -1 - aload_3 - iload 5 - aaload - invokevirtual jode/jvm/Value/objectValue()Ljava/lang/Object; - dup -; stack: -; array -; store-value -; index -; array - - instanceof [Z - ifne bool_array_store - iload 6 - aload 8 - iload 7 - tableswitch 84 - byte_array_store - char_array_store - short_array_store - default: normal_array_store - -; stack: -; store-value -; index -; array - -normal_array_store: - invokevirtual jode/jvm/Value/objectValue()Ljava/lang/Object; -aastore_start: - invokestatic java/lang/reflect/Array/set(Ljava/lang/Object;ILjava/lang/Object;)V -aastore_end: - goto big_loop - -bool_array_store: - iload 6 - aload 8 - invokevirtual jode/jvm/Value/intValue()I -zastore_start: - invokestatic java/lang/reflect/Array/setBoolean(Ljava/lang/Object;IZ)V -zastore_end: - goto big_loop - -byte_array_store: - invokevirtual jode/jvm/Value/intValue()I -bastore_start: - invokestatic java/lang/reflect/Array/setByte(Ljava/lang/Object;IB)V -bastore_end: - goto big_loop - -char_array_store: - invokevirtual jode/jvm/Value/intValue()I -castore_start: - invokestatic java/lang/reflect/Array/setChar(Ljava/lang/Object;IC)V -castore_end: - goto big_loop - -short_array_store: - invokevirtual jode/jvm/Value/intValue()I -sastore_start: - invokestatic java/lang/reflect/Array/setShort(Ljava/lang/Object;IS)V -sastore_end: - goto big_loop - - -; ================= - -no_const_store_load_instr: - dup - bipush 96 ; opc_iadd - if_icmpge arith_instr - - dup - bipush 92 - if_icmpge dup2_swap_instr - dup - bipush 89 - if_icmpge dup_instr - -; ==== POP INSTRUCTION - bipush 86 - isub ; pop count - ineg - iload 5 ; stacktop - iadd - istore 5 ; stacktop - goto big_loop - -; ==== DUP INSTRUCTION -dup_instr: - bipush 88 - isub ; dup depth+1 - istore 7 - aload_3 - iload 5 - aaload ; stack[stacktop] - iload 5 - -next_loop_dup1: -; Stack: -; stacktop-i -; stack[stacktop] - iinc 7 -1 - dup - aload_3 - swap - aaload -; Stack: -; stack[stacktop-i] -; stacktop-i -; stack[stacktop] - - swap - iconst_1 - isub - dup_x1 - -; Stack: -; stacktop-(i+1) -; stack[stacktop-i] -; stacktop-(i+1) -; stack[stacktop] - aload_3 - swap - aaload - -; Stack: -; stack[stacktop-(i+1)] -; stack[stacktop-i] -; stacktop-(i+1) -; stack[stacktop] - invokevirtual jode/jvm/Value/setValue(Ljode/jvm/Value;)V - iload 7 - ifne next_loop_dup1 - -; Stack: -; stacktop-(depth+1) -; stack[stacktop] - aload_3 - swap - aaload - swap - invokevirtual jode/jvm/Value/setValue(Ljode/jvm/Value;)V - iinc 5 1 - goto big_loop - -dup2_swap_instr: - dup - bipush 95 ; opc_swap - if_icmpne dup2_instr - -; ==== SWAP INSTRUCTION - pop - aload_3 - iload 5 - iconst_1 - isub - dup2 - aaload - astore 7 - -; Stack: -; stacktop-1 -; stack - dup2 - iconst_1 - isub - dup2_x2 -; stacktop-2 -; stack -; stacktop-1 -; stack -; stacktop-2 -; stack - aaload - aastore - aload 7 - aastore - goto big_loop - - - -; ==== DUP2 INSTRUCTION -dup2_instr: - bipush 90 - isub ; dup depth+2 - istore 7 - aload_3 - iload 5 - dup2 - aaload ; stack[stacktop] - astore 8 - iconst_1 - iadd - aaload ; stack[stacktop+1] - iload 5 - -next_loop_dup2: -; Stack: -; stacktop-i -; stack[stacktop+1] - iinc 7 -1 - dup - aload_3 - swap - iconst_1 - iadd - aaload -; Stack: -; stack[stacktop-i+1] -; stacktop-i -; stack[stacktop+1] - - swap - iconst_1 - isub - dup_x1 - -; Stack: -; stacktop-i-1 -; stack[stacktop-i+1] -; stacktop-i-1 -; stack[stacktop+1] - aload_3 - swap - aaload - -; Stack: -; stack[stacktop-i-1] -; stack[stacktop-i] -; stacktop-i-1 -; stack[stacktop+1] - invokevirtual jode/jvm/Value/setValue(Ljode/jvm/Value;)V - iload 7 - ifne next_loop_dup2 - -; Stack: -; stacktop-depth-2 -; stack[stacktop+1] - aload_3 - swap - dup2 - aaload - aload 8 - -; Stack: -; stack[stacktop] -; stack[stacktop-depth-2] -; stacktop-depth-2 -; stack -; stack[stacktop+1] - - invokevirtual jode/jvm/Value/setValue(Ljode/jvm/Value;)V - iconst_1 - iadd - aaload - swap - invokevirtual jode/jvm/Value/setValue(Ljode/jvm/Value;)V - iinc 5 2 - goto big_loop - -; ========== ARITHMETICS - -arith_instr: - dup - sipush 132 ; opc_iinc - if_icmpge convert_or_cmp_or_iinc_instr - dup - bipush 126 ; opc_iand - if_icmpge binary_op_instr - dup - bipush 116 ; opc_ineg - if_icmpge neg_or_shift_instr - - dup - iconst_1 - iand - ifeq binary_op_instr - iinc 5 -1 ; stacktop--; - -binary_op_instr: - iinc 5 -1 ; stacktop--; - dup - iconst_1 - iand - iconst_1 - iadd ; long ? 2 : 1 - aload_3 - iload 5 - dup2_x1 - aaload - astore 7 ; local_7 = stack[stacktop] - isub - goto arith_do_instr - -iinc_instr: - pop2 - aload_2 - aload 6 - invokevirtual jode/bytecode/Instruction/getLocalSlot()I - aaload - dup - invokevirtual jode/jvm/Value/intValue()I - aload 6 - invokevirtual jode/bytecode/Instruction/getIncrement()I - iadd - invokevirtual jode/jvm/Value/setInt(I)V - goto big_loop - -convert_or_cmp_or_iinc_instr: - dup - sipush 133 - isub - dup - iflt iinc_instr - iconst_1 - swap - ishl - dup - sipush 0x7FFF - iand - ifeq two_op_instr - aconst_null - goto second_op_done -two_op_instr: - iinc 5 -1 ; stacktop--; - ldc 0x30000 - iand - iconst_2 - swap - ifne second_op_single - iinc 5 -1 - iconst_2 - ishl - -second_op_single: - aload_3 - iload 5 - aaload -second_op_done: -; Stack: -; second_op -; opcode mask -; opcode - astore 7 - dup - sipush 0x0E38 - iand - iinc 5 -1 - ifeq first_op_single - iinc 5 -1 -first_op_single: -; opcode mask -; opcode - sipush 0x05A5 - iand - - aload_3 - iload 5 - aaload - swap - iinc 5 1 - ifeq result_single - iinc 5 1 -result_single: - goto arith_do_instr_no_aaload - -neg_or_shift_instr: - dup - bipush 120 ; opc_ishl - if_icmpge binary_op_instr - -unary_instr: - aconst_null - astore 7 - dup - iconst_1 - iand - iconst_1 - iadd ; long instr ? 2 : 1 - ineg - iload 5 - iadd - aload_3 - swap - -; Local: -; 7 == stack[op2] / null -; Stack: -; op/result1 stackindex -; stack -; opcode -arith_do_instr: - aaload -arith_do_instr_no_aaload: - dup_x1 - swap - tableswitch 96 - iadd_instr - ladd_instr - fadd_instr - dadd_instr - isub_instr - lsub_instr - fsub_instr - dsub_instr - imul_instr - lmul_instr - fmul_instr - dmul_instr - idiv_instr - ldiv_instr - fdiv_instr - ddiv_instr - irem_instr - lrem_instr - frem_instr - drem_instr - ineg_instr - fneg_instr - lneg_instr - dneg_instr - ishl_instr - lshl_instr - ishr_instr - lshr_instr - iushr_instr - lushr_instr - iand_instr - land_instr - ior_instr - lor_instr - ixor_instr - lxor_instr - lxor_instr ; opc_iinc - i2l_instr - i2f_instr - i2d_instr - l2i_instr - l2f_instr - l2d_instr - f2i_instr - f2l_instr - f2d_instr - d2i_instr - d2l_instr - d2f_instr - i2b_instr - i2c_instr - i2s_instr - lcmp_instr - fcmpl_instr - fcmpg_instr - dcmpl_instr - dcmpg_instr - default: iadd_instr - -iadd_instr: - invokevirtual jode/jvm/Value/intValue()I - aload 7 - invokevirtual jode/jvm/Value/intValue()I - iadd - invokevirtual jode/jvm/Value/setInt(I)V - goto big_loop -isub_instr: - invokevirtual jode/jvm/Value/intValue()I - aload 7 - invokevirtual jode/jvm/Value/intValue()I - isub - invokevirtual jode/jvm/Value/setInt(I)V - goto big_loop -imul_instr: - invokevirtual jode/jvm/Value/intValue()I - aload 7 - invokevirtual jode/jvm/Value/intValue()I - imul - invokevirtual jode/jvm/Value/setInt(I)V - goto big_loop -idiv_instr: - invokevirtual jode/jvm/Value/intValue()I - aload 7 - invokevirtual jode/jvm/Value/intValue()I -idiv_start: - idiv -idiv_end: - invokevirtual jode/jvm/Value/setInt(I)V - goto big_loop -irem_instr: - invokevirtual jode/jvm/Value/intValue()I - aload 7 - invokevirtual jode/jvm/Value/intValue()I -irem_start: - irem -irem_end: - invokevirtual jode/jvm/Value/setInt(I)V - goto big_loop -ineg_instr: - invokevirtual jode/jvm/Value/intValue()I - ineg - invokevirtual jode/jvm/Value/setInt(I)V - goto big_loop -ishl_instr: - invokevirtual jode/jvm/Value/intValue()I - aload 7 - invokevirtual jode/jvm/Value/intValue()I - ishl - invokevirtual jode/jvm/Value/setInt(I)V - goto big_loop -ishr_instr: - invokevirtual jode/jvm/Value/intValue()I - aload 7 - invokevirtual jode/jvm/Value/intValue()I - ishr - invokevirtual jode/jvm/Value/setInt(I)V - goto big_loop -iushr_instr: - invokevirtual jode/jvm/Value/intValue()I - aload 7 - invokevirtual jode/jvm/Value/intValue()I - iushr - invokevirtual jode/jvm/Value/setInt(I)V - goto big_loop -iand_instr: - invokevirtual jode/jvm/Value/intValue()I - aload 7 - invokevirtual jode/jvm/Value/intValue()I - iand - invokevirtual jode/jvm/Value/setInt(I)V - goto big_loop -ior_instr: - invokevirtual jode/jvm/Value/intValue()I - aload 7 - invokevirtual jode/jvm/Value/intValue()I - ior - invokevirtual jode/jvm/Value/setInt(I)V - goto big_loop -ixor_instr: - invokevirtual jode/jvm/Value/intValue()I - aload 7 - invokevirtual jode/jvm/Value/intValue()I - ixor - invokevirtual jode/jvm/Value/setInt(I)V - goto big_loop - -ladd_instr: - invokevirtual jode/jvm/Value/longValue()J - aload 7 - invokevirtual jode/jvm/Value/longValue()J - ladd - invokevirtual jode/jvm/Value/setLong(J)V - goto big_loop -lsub_instr: - invokevirtual jode/jvm/Value/longValue()J - aload 7 - invokevirtual jode/jvm/Value/longValue()J - lsub - invokevirtual jode/jvm/Value/setLong(J)V - goto big_loop -lmul_instr: - invokevirtual jode/jvm/Value/longValue()J - aload 7 - invokevirtual jode/jvm/Value/longValue()J - lmul - invokevirtual jode/jvm/Value/setLong(J)V - goto big_loop -ldiv_instr: - invokevirtual jode/jvm/Value/longValue()J - aload 7 - invokevirtual jode/jvm/Value/longValue()J -ldiv_start: - ldiv -ldiv_end: - invokevirtual jode/jvm/Value/setLong(J)V - goto big_loop -lrem_instr: - invokevirtual jode/jvm/Value/longValue()J - aload 7 - invokevirtual jode/jvm/Value/longValue()J -lrem_start: - lrem -lrem_end: - invokevirtual jode/jvm/Value/setLong(J)V - goto big_loop -lneg_instr: - invokevirtual jode/jvm/Value/longValue()J - lneg - invokevirtual jode/jvm/Value/setLong(J)V - goto big_loop -lshl_instr: - invokevirtual jode/jvm/Value/longValue()J - aload 7 - invokevirtual jode/jvm/Value/intValue()I - lshl - invokevirtual jode/jvm/Value/setLong(J)V - goto big_loop -lshr_instr: - invokevirtual jode/jvm/Value/longValue()J - aload 7 - invokevirtual jode/jvm/Value/intValue()I - lshr - invokevirtual jode/jvm/Value/setLong(J)V - goto big_loop -lushr_instr: - invokevirtual jode/jvm/Value/longValue()J - aload 7 - invokevirtual jode/jvm/Value/intValue()I - lushr - invokevirtual jode/jvm/Value/setLong(J)V - goto big_loop -land_instr: - invokevirtual jode/jvm/Value/longValue()J - aload 7 - invokevirtual jode/jvm/Value/longValue()J - land - invokevirtual jode/jvm/Value/setLong(J)V - goto big_loop -lor_instr: - invokevirtual jode/jvm/Value/longValue()J - aload 7 - invokevirtual jode/jvm/Value/longValue()J - lor - invokevirtual jode/jvm/Value/setLong(J)V - goto big_loop -lxor_instr: - invokevirtual jode/jvm/Value/longValue()J - aload 7 - invokevirtual jode/jvm/Value/longValue()J - lxor - invokevirtual jode/jvm/Value/setLong(J)V - goto big_loop - -fadd_instr: - invokevirtual jode/jvm/Value/floatValue()F - aload 7 - invokevirtual jode/jvm/Value/floatValue()F - fadd - invokevirtual jode/jvm/Value/setFloat(F)V - goto big_loop -fsub_instr: - invokevirtual jode/jvm/Value/floatValue()F - aload 7 - invokevirtual jode/jvm/Value/floatValue()F - fsub - invokevirtual jode/jvm/Value/setFloat(F)V - goto big_loop -fmul_instr: - invokevirtual jode/jvm/Value/floatValue()F - aload 7 - invokevirtual jode/jvm/Value/floatValue()F - fmul - invokevirtual jode/jvm/Value/setFloat(F)V - goto big_loop -fdiv_instr: - invokevirtual jode/jvm/Value/floatValue()F - aload 7 - invokevirtual jode/jvm/Value/floatValue()F - fdiv - invokevirtual jode/jvm/Value/setFloat(F)V - goto big_loop -frem_instr: - invokevirtual jode/jvm/Value/floatValue()F - aload 7 - invokevirtual jode/jvm/Value/floatValue()F - frem - invokevirtual jode/jvm/Value/setFloat(F)V - goto big_loop -fneg_instr: - invokevirtual jode/jvm/Value/floatValue()F - fneg - invokevirtual jode/jvm/Value/setFloat(F)V - goto big_loop - -dadd_instr: - invokevirtual jode/jvm/Value/doubleValue()D - aload 7 - invokevirtual jode/jvm/Value/doubleValue()D - dadd - invokevirtual jode/jvm/Value/setDouble(D)V - goto big_loop -dsub_instr: - invokevirtual jode/jvm/Value/doubleValue()D - aload 7 - invokevirtual jode/jvm/Value/doubleValue()D - dsub - invokevirtual jode/jvm/Value/setDouble(D)V - goto big_loop -dmul_instr: - invokevirtual jode/jvm/Value/doubleValue()D - aload 7 - invokevirtual jode/jvm/Value/doubleValue()D - dmul - invokevirtual jode/jvm/Value/setDouble(D)V - goto big_loop -ddiv_instr: - invokevirtual jode/jvm/Value/doubleValue()D - aload 7 - invokevirtual jode/jvm/Value/doubleValue()D - ddiv - invokevirtual jode/jvm/Value/setDouble(D)V - goto big_loop -drem_instr: - invokevirtual jode/jvm/Value/doubleValue()D - aload 7 - invokevirtual jode/jvm/Value/doubleValue()D - drem - invokevirtual jode/jvm/Value/setDouble(D)V - goto big_loop -dneg_instr: - invokevirtual jode/jvm/Value/doubleValue()D - dneg - invokevirtual jode/jvm/Value/setDouble(D)V - goto big_loop - - -i2f_instr: - invokevirtual jode/jvm/Value/intValue()I - i2f - invokevirtual jode/jvm/Value/setFloat(F)V - goto big_loop -i2l_instr: - invokevirtual jode/jvm/Value/intValue()I - i2l - invokevirtual jode/jvm/Value/setLong(J)V - goto big_loop -i2d_instr: - invokevirtual jode/jvm/Value/intValue()I - i2d - invokevirtual jode/jvm/Value/setDouble(D)V - goto big_loop -l2i_instr: - invokevirtual jode/jvm/Value/longValue()J - l2i - invokevirtual jode/jvm/Value/setInt(I)V - goto big_loop -l2f_instr: - invokevirtual jode/jvm/Value/longValue()J - l2f - invokevirtual jode/jvm/Value/setFloat(F)V - goto big_loop -l2d_instr: - invokevirtual jode/jvm/Value/longValue()J - l2d - invokevirtual jode/jvm/Value/setDouble(D)V - goto big_loop -f2i_instr: - invokevirtual jode/jvm/Value/floatValue()F - f2i - invokevirtual jode/jvm/Value/setInt(I)V - goto big_loop -f2l_instr: - invokevirtual jode/jvm/Value/floatValue()F - f2l - invokevirtual jode/jvm/Value/setLong(J)V - goto big_loop -f2d_instr: - invokevirtual jode/jvm/Value/floatValue()F - f2d - invokevirtual jode/jvm/Value/setDouble(D)V - goto big_loop -d2i_instr: - invokevirtual jode/jvm/Value/doubleValue()D - d2i - invokevirtual jode/jvm/Value/setInt(I)V - goto big_loop -d2f_instr: - invokevirtual jode/jvm/Value/doubleValue()D - d2f - invokevirtual jode/jvm/Value/setFloat(F)V - goto big_loop -d2l_instr: - invokevirtual jode/jvm/Value/doubleValue()D - d2l - invokevirtual jode/jvm/Value/setLong(J)V - goto big_loop -i2b_instr: - invokevirtual jode/jvm/Value/intValue()I - i2b - invokevirtual jode/jvm/Value/setInt(I)V - goto big_loop -i2c_instr: - invokevirtual jode/jvm/Value/intValue()I - i2c - invokevirtual jode/jvm/Value/setInt(I)V - goto big_loop -i2s_instr: - invokevirtual jode/jvm/Value/intValue()I - i2s - invokevirtual jode/jvm/Value/setInt(I)V - goto big_loop - -lcmp_instr: - invokevirtual jode/jvm/Value/longValue()J - aload 7 - invokevirtual jode/jvm/Value/longValue()J - lcmp - invokevirtual jode/jvm/Value/setInt(I)V - goto big_loop -fcmpl_instr: - invokevirtual jode/jvm/Value/floatValue()F - aload 7 - invokevirtual jode/jvm/Value/floatValue()F - fcmpl - invokevirtual jode/jvm/Value/setInt(I)V - goto big_loop -fcmpg_instr: - invokevirtual jode/jvm/Value/floatValue()F - aload 7 - invokevirtual jode/jvm/Value/floatValue()F - fcmpg - invokevirtual jode/jvm/Value/setInt(I)V - goto big_loop -dcmpl_instr: - invokevirtual jode/jvm/Value/doubleValue()D - aload 7 - invokevirtual jode/jvm/Value/doubleValue()D - dcmpl - invokevirtual jode/jvm/Value/setInt(I)V - goto big_loop -dcmpg_instr: - invokevirtual jode/jvm/Value/doubleValue()D - aload 7 - invokevirtual jode/jvm/Value/doubleValue()D - dcmpg - invokevirtual jode/jvm/Value/setInt(I)V - goto big_loop - -; ============================================ -; IF AND SPECIAL INSTR -; ============================================ - -if_or_special_instr: - dup - tableswitch 153 - ifunary_instr - ifunary_instr - ifunary_instr - ifunary_instr - ifunary_instr - ifunary_instr - ifbinary_instr - ifbinary_instr - ifbinary_instr - ifbinary_instr - ifbinary_instr - ifbinary_instr - ifabinary_instr - ifabinary_instr - goto_instr - jsr_instr - ret_instr - illegal_instr - lookupswitch_instr - areturn_instr - lreturn_instr - areturn_instr - lreturn_instr - areturn_instr - return_instr - getstatic_instr - putstatic_instr - getfield_instr - putfield_instr - invoke_instr - invoke_instr - invokestatic_instr - invoke_instr - illegal_instr - new_instr - illegal_instr - illegal_instr - arraylength_instr - athrow_instr - checkcast_instr - instanceof_instr - monitorenter_instr - monitorexit_instr - illegal_instr - multianewarray_instr - ifaunary_instr - ifaunary_instr - default: illegal_instr - -ifabinary_instr: - iconst_1 - iadd - iconst_1 - iand - iinc 5 -1 - aload_3 - iload 5 - aaload - invokevirtual jode/jvm/Value/objectValue()Ljava/lang/Object; - goto ifacmp -ifaunary_instr: - iconst_1 - iand - aconst_null -ifacmp: - iinc 5 -1 - aload_3 - iload 5 - aaload - invokevirtual jode/jvm/Value/objectValue()Ljava/lang/Object; - if_acmpeq ifacmp_equal - ifeq big_loop - goto jump_succ -ifacmp_equal: - ifne big_loop - goto jump_succ - -ifbinary_instr: - sipush 133 ; opc_if_icmple - 31 - isub - iinc 5 -1 - aload_3 - iload 5 - aaload - invokevirtual jode/jvm/Value/intValue()I - goto ificmp -ifunary_instr: - bipush 127 ; opc_ifle - 31 - isub - iconst_0 -ificmp: - iinc 5 -1 - aload_3 - iload 5 - aaload - invokevirtual jode/jvm/Value/intValue()I - dup2 - if_icmplt ificmp_greater ; Note, that operands are swapped - if_icmpeq ificmp_equal -ificmp_less: - bipush 0x19 ; ne,lt,le - goto ificmp_final -ificmp_equal: - bipush 0x25 ; eq,ge,le - goto ificmp_final -ificmp_greater: - pop2 - bipush 0x16 ; ne,ge,gt -ificmp_final: - swap - ishl - ifge big_loop -jump_succ: - aload 6 - invokevirtual jode/bytecode/Instruction/getSingleSucc()Ljode/bytecode/Instruction; - astore 4 - goto big_loop - -jsr_instr: - aload_3 - iload 5 - aaload - aload 6 - invokevirtual jode/jvm/Value/setObject(Ljava/lang/Object;)V - iinc 5 1 - -goto_instr: - pop - goto jump_succ - -ret_instr: - pop - iinc 5 -1 - aload_3 - iload 5 - aaload - invokevirtual jode/jvm/Value/objectValue()Ljava/lang/Object; - checkcast jode/bytecode/Instruction - astore 4 - goto big_loop - -lookupswitch_instr: - pop - iinc 5 -1 - aload_3 - iload 5 - aaload - invokevirtual jode/jvm/Value/intValue()I - aload 6 - invokevirtual jode/bytecode/Instruction/getValues()[I - iconst_0 -; Stack: -; i -; objData -; value -lookup_loop: - dup2_x1 - iaload - istore 7 - dup_x2 - iload 7 - if_icmpeq lookup_found - iconst_1 - iadd - dup2 - swap - arraylength - if_icmplt lookup_loop -lookup_found: -; Stack: -; i -; objData -; value - istore 7 - pop2 - aload 6 - invokevirtual jode/bytecode/Instruction/getSuccs()[Ljode/bytecode/Instruction; - iload 7 - aaload - astore 4 - goto big_loop - -lreturn_instr: - iinc 5 -1 -areturn_instr: - pop - iinc 5 -1 - aload_3 - iload 5 - aaload - invokevirtual jode/jvm/Value/objectValue()Ljava/lang/Object; - areturn -return_instr: - pop - aconst_null - areturn - -putfield_object: - pop - goto putfield_normal - -putstatic_instr: -putfield_instr: - istore 7 - aload_0 - aload 6 - invokevirtual jode/bytecode/Instruction/getReference()Ljode/bytecode/Reference; - dup - invokevirtual jode/bytecode/Reference/getType()Ljava/lang/String; - dup - invokevirtual java/lang/String/length()I - iconst_1 - if_icmpne putfield_object - iconst_0 - invokevirtual java/lang/String/charAt(I)C - dup - bipush 74 ; 'J' - if_icmpeq putfield_long - bipush 68 ; 'D' - if_icmpne putfield_normal - iconst_0 -putfield_long: - iinc 5 -1 - pop -; Stack: -; Reference -; env -putfield_normal: - iinc 5 -1 - aload_3 - iload 5 - aaload - invokevirtual jode/jvm/Value/objectValue()Ljava/lang/Object; -; Stack: -; value -; Reference -; env - aconst_null - iload 7 - sipush 179 ; opc_putstatic - if_icmpeq putfield_static - pop - iinc 5 -1 - aload_3 - iload 5 - aaload - invokevirtual jode/jvm/Value/objectValue()Ljava/lang/Object; - dup - ifnull popLLLL_create_nullexc -putfield_static: - swap - invokeinterface jode/jvm/RuntimeEnvironment/putField(Ljode/bytecode/Reference;Ljava/lang/Object;Ljava/lang/Object;)V 4 - goto big_loop - -getstatic_instr: - pop - aload_3 - iload 5 - iinc 5 1 - aaload - aconst_null - astore 7 - goto getfield_do - -getfield_instr: - pop - aload_3 - iload 5 - iconst_m1 - iadd - aaload - dup - invokevirtual jode/jvm/Value/objectValue()Ljava/lang/Object; - dup - ifnull popLL_create_nullexc - astore 7 -getfield_do: - aload_0 - aload 6 - invokevirtual jode/bytecode/Instruction/getReference()Ljode/bytecode/Reference; - dup_x2 - aload 7 -getfield_start: - invokeinterface jode/jvm/RuntimeEnvironment/getField(Ljode/bytecode/Reference;Ljava/lang/Object;)Ljava/lang/Object; 3 -getfield_end: - invokevirtual jode/jvm/Value/setObject(Ljava/lang/Object;)V - invokevirtual jode/bytecode/Reference/getType()Ljava/lang/String; - dup - invokevirtual java/lang/String/length()I - iconst_1 - if_icmpne popL_big_loop - iconst_0 - invokevirtual java/lang/String/charAt(I)C - dup - bipush 74 ; 'J' - if_icmpeq getfield_long - bipush 68 ; 'D' - if_icmpne big_loop - iconst_0 -getfield_long: - pop - iinc 5 1 - goto big_loop - - -invokestatic_instr: -invoke_instr: - istore 7 - aload_0 - aload 6 - invokevirtual jode/bytecode/Instruction/getReference()Ljode/bytecode/Reference; - dup - invokevirtual jode/bytecode/Reference/getType()Ljava/lang/String; - invokestatic jode/type/Type/tType(Ljava/lang/String;)Ljode/type/Type; - checkcast jode/type/MethodType -; Stack: -; methodType -; ref -; env - dup_x2 -; Stack: -; methodType -; ref -; env -; methodType - invokevirtual jode/type/MethodType/getParameterTypes()[Ljode/type/Type; - dup - arraylength - dup - anewarray java/lang/Object - dup_x2 - pop - goto invoke_test -; Stack: -; i -; paramTypes -; args -; ref -; env -; methodType -invoke_loop: -; dup -; invokestatic java/lang/String/valueOf(I)Ljava/lang/String; -; getstatic java/lang/System/err Ljava/io/PrintStream; -; swap -; invokevirtual java/io/PrintStream/println(Ljava/lang/String;)V - - dup2_x1 - aaload -; paramTypes[i] -; args -; i -; paramTypes -; ref -; env -; methodType - invokevirtual jode/type/Type/stackSize()I - ineg - iload 5 - iadd - istore 5 - dup_x2 - swap - dup_x1 - aload_3 - iload 5 - aaload - invokevirtual jode/jvm/Value/objectValue()Ljava/lang/Object; - aastore -; Stack: -; i -; paramTypes -; args -; ref -; env -; methodType -invoke_test: - iconst_1 - isub - dup - ifge invoke_loop - pop2 - astore 6 - dup - invokevirtual jode/bytecode/Reference/getName()Ljava/lang/String; -; Stack: -; name -; ref -; env -; methodType -; Locals: -; 6 = args -; 7 = opcode - - ldc "" - invokevirtual java/lang/String/equals(Ljava/lang/Object;)Z - ifeq invoke_normalmethod - - iinc 5 -1 - aload_3 - iload 5 - aaload - invokevirtual jode/jvm/Value/getNewObject()Ljode/jvm/NewObject; - dup_x2 - pop - aload 6 -newinstance_start: - invokeinterface jode/jvm/RuntimeEnvironment/invokeConstructor(Ljode/bytecode/Reference;[Ljava/lang/Object;)Ljava/lang/Object; 3 -newinstance_end: - invokevirtual jode/jvm/NewObject/setObject(Ljava/lang/Object;)V -popL_big_loop: - pop ; MethodType - goto big_loop - -invoke_normalmethod: - iload 7 - sipush 184 ; opc_invokestatic - if_icmpne invoke_nonstatic - iconst_0 - aconst_null - goto invoke_do -invoke_nonstatic: - iconst_1 - iload 7 - sipush 183 ; opc_invokespecial - if_icmpne invoke_nonspecial - iconst_1 - ixor -invoke_nonspecial: - iinc 5 -1 - aload_3 - iload 5 - aaload - invokevirtual jode/jvm/Value/objectValue()Ljava/lang/Object; - dup - ifnull popLILLL_create_nullexc -invoke_do: - aload 6 -invoke_start: - invokeinterface jode/jvm/RuntimeEnvironment/invokeMethod(Ljode/bytecode/Reference;ZLjava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object; 5 -invoke_end: - astore 6 - -; Stack: -; methodType - invokevirtual jode/type/MethodType/getReturnType()Ljode/type/Type; - invokevirtual jode/type/Type/stackSize()I - dup - ifeq popI_big_loop - aload_3 - iload 5 - dup_x1 - aaload - aload 6 - invokevirtual jode/jvm/Value/setObject(Ljava/lang/Object;)V - iadd - istore 5 - goto big_loop - -new_instr: - pop - aload_3 - iload 5 - aaload - new jode/jvm/NewObject - dup - aload 6 - invokevirtual jode/bytecode/Instruction/getClazzType()Ljava/lang/String; - invokenonvirtual jode/jvm/NewObject/(Ljava/lang/String;)V - invokevirtual jode/jvm/Value/setNewObject(Ljode/jvm/NewObject;)V - iinc 5 1 - goto big_loop - -arraylength_instr: - pop - aload_3 - iload 5 - iconst_m1 - iadd - aaload - dup - invokevirtual jode/jvm/Value/objectValue()Ljava/lang/Object; -arrlength_start: - invokestatic java/lang/reflect/Array/getLength(Ljava/lang/Object;)I -arrlength_end: - invokevirtual jode/jvm/Value/setInt(I)V - goto big_loop - -athrow_instr: - pop - iinc 5 -1 - aload_3 - iload 5 - aaload - invokevirtual jode/jvm/Value/objectValue()Ljava/lang/Object; - dup - ifnull popL_create_nullexc - checkcast java/lang/Throwable - goto throw_exception -popLILLL_create_nullexc: - pop2 - pop - goto popLL_create_nullexc -popLLLL_create_nullexc: - pop2 -popLL_create_nullexc: - pop -popL_create_nullexc: - pop -create_nullexc: - new java/lang/NullPointerException - dup - invokenonvirtual java/lang/NullPointerException/()V - goto throw_exception - -checkcast_instr: - pop - aload_0 - aload_3 - iload 5 - iconst_m1 - iadd - aaload - invokevirtual jode/jvm/Value/objectValue()Ljava/lang/Object; - dup - ifnull popLL_big_loop - aload 6 - invokevirtual jode/bytecode/Instruction/getClazzType()Ljava/lang/String; - invokeinterface jode/jvm/RuntimeEnvironment/instanceOf(Ljava/lang/Object;Ljava/lang/String;)Z 3 - ifne big_loop - new java/lang/ClassCastException - dup - invokenonvirtual java/lang/ClassCastException/()V - goto throw_exception -popLL_big_loop: - pop2 - goto big_loop - -instanceof_instr: - pop - aload_0 - aload_3 - iload 5 - iconst_m1 - iadd - aaload - dup_x1 - invokevirtual jode/jvm/Value/objectValue()Ljava/lang/Object; - aload 6 - invokevirtual jode/bytecode/Instruction/getClazzType()Ljava/lang/String; - invokeinterface jode/jvm/RuntimeEnvironment/instanceOf(Ljava/lang/Object;Ljava/lang/String;)Z 3 - invokevirtual jode/jvm/Value/setInt(I)V - goto big_loop - -monitorenter_instr: - pop - aload_0 - aload_3 - iinc 5 -1 - iload 5 - aaload - invokevirtual jode/jvm/Value/objectValue()Ljava/lang/Object; - invokeinterface jode/jvm/RuntimeEnvironment/enterMonitor(Ljava/lang/Object;)V 2 - goto big_loop -monitorexit_instr: - pop - aload_0 - aload_3 - iinc 5 -1 - iload 5 - aaload - invokevirtual jode/jvm/Value/objectValue()Ljava/lang/Object; - invokeinterface jode/jvm/RuntimeEnvironment/exitMonitor(Ljava/lang/Object;)V 2 - goto big_loop - -multianewarray_instr: - pop - aload 6 - invokevirtual jode/bytecode/Instruction/getDimensions()I - dup - istore 7 - newarray int - goto newarray_test -newarray_loop: - dup - iload 7 - iinc 5 -1 - aload_3 - iload 5 - aaload - invokevirtual jode/jvm/Value/intValue()I - iastore -newarray_test: - iinc 7 -1 - iload 7 - ifge newarray_loop - astore 7 - aload_3 - iload 5 - aaload - iinc 5 1 - aload_0 - aload 6 - invokevirtual jode/bytecode/Instruction/getClazzType()Ljava/lang/String; - aload 7 -newarray_start: - invokeinterface jode/jvm/RuntimeEnvironment/newArray(Ljava/lang/String;[I)Ljava/lang/Object; 3 -newarray_end: - invokevirtual jode/jvm/Value/setObject(Ljava/lang/Object;)V - goto big_loop - -wrapexception_handler: - goto throw_exception -throw_exception: - aconst_null - astore 6 - goto handle_exception - -invocationtarget_handler: - dup - astore 6 - invokevirtual java/lang/reflect/InvocationTargetException/getTargetException()Ljava/lang/Throwable; -handle_exception: - astore 8 - aload_1 - invokevirtual jode/bytecode/BytecodeInfo/getExceptionHandlers()[Ljode/bytecode/Handler; - dup - arraylength - dup - ifeq nohandlers - istore 7 - aload 4 - invokevirtual jode/bytecode/Instruction/getAddr()I - istore 4 - iconst_0 -; Stack: -; index -; handlers -handler_loop: - dup2 - aaload - dup - getfield jode/bytecode/Handler/start Ljode/bytecode/Instruction; - invokevirtual jode/bytecode/Instruction/getAddr()I - iload 4 - if_icmplt wrong_handler_pop - dup - getfield jode/bytecode/Handler/end Ljode/bytecode/Instruction; - invokevirtual jode/bytecode/Instruction/getAddr()I - iload 4 - if_icmplt wrong_handler_pop - dup - getfield jode/bytecode/Handler/type Ljava/lang/String; - aload_0 - swap - aload 8 - swap - invokeinterface jode/jvm/RuntimeEnvironment/instanceOf(Ljava/lang/Object;Ljava/lang/String;)Z 3 - ifne wrong_handler_pop - - getfield jode/bytecode/Handler/catcher Ljode/bytecode/Instruction; - astore 4 - pop2 - iconst_1 - istore 5 - aload_3 - iconst_0 - aaload - aload 8 - invokevirtual jode/jvm/Value/setObject(Ljava/lang/Object;)V - goto big_loop - -wrong_handler_pop: - pop - iconst_1 - iadd - dup - iload 7 - if_icmplt handler_loop -nohandlers: - pop2 - aload 6 - ifnull wrap_exc - aload 6 - athrow -wrap_exc: - new java/lang/reflect/InvocationTargetException - dup - aload 8 - invokenonvirtual java/lang/reflect/InvocationTargetException/(Ljava/lang/Throwable;)V - athrow -.end method