@Override public void accept(DexCodeVisitor cv) { cv.visitStmt3R(op, a, b, c); } }
/** * <pre> * * OP_ADD * OP_SUB * OP_MUL * OP_DIV * OP_REM * OP_AND * OP_OR * OP_XOR * OP_SHL * OP_SHR * OP_USHR * OP_CMPL * OP_CMPG * OP_CMP * OP_AGETX * OP_APUTX * </pre> * */ public void visitStmt3R(Op op, int a, int b, int c) { if (visitor != null) { visitor.visitStmt3R(op, a, b, c); } }
@Test public static void a122(DexClassVisitor cv) { DexMethodVisitor mv = cv.visitMethod(ACC_PUBLIC | ACC_STATIC, new Method("La;", "b", new String[] {}, "V")); DexCodeVisitor code = mv.visitCode(); code.visitRegister(3); code.visitConstStmt(CONST, 0, Integer.valueOf(0)); code.visitConstStmt(CONST, 2, Integer.valueOf(1)); code.visitStmt3R(AGET, 1, 0, 2); code.visitStmt0R(RETURN_VOID); code.visitEnd(); mv.visitEnd(); }
dcv.visitConstStmt(Op.CONST, 2, i); box(type, argStart, 3, dcv); dcv.visitStmt3R(Op.APUT_OBJECT, 3, 1, 2); if (type == 'J' || type == 'D') { argStart += 2;
String argType = parameterTypes[i1]; dcv.visitConstStmt(Op.CONST, 0, i1); dcv.visitStmt3R(Op.AGET_OBJECT, i, argStart, 0); unbox(argType, i, dcv); args[args_index++] = i;
@Test public static void a123(DexClassVisitor cv) { DexMethodVisitor mv = cv.visitMethod(ACC_PUBLIC | ACC_STATIC, new Method("La;", "b", new String[] {}, "V")); DexCodeVisitor code = mv.visitCode(); code.visitRegister(3); code.visitConstStmt(CONST, 0, 0); code.visitConstStmt(CONST, 1, 1); code.visitConstStmt(CONST, 2, 0x63); code.visitStmt3R(APUT, 2, 0, 1); code.visitStmt0R(RETURN_VOID); code.visitEnd(); mv.visitEnd(); }
@Test public static void i71(DexClassVisitor cv) { DexMethodVisitor mv = cv.visitMethod(ACC_STATIC, new Method("La;", "test", new String[] {}, "V")); if (mv != null) { DexCodeVisitor code = mv.visitCode(); if (code != null) { code.visitRegister(2); code.visitConstStmt(CONST_WIDE, 0, 0L); code.visitConstStmt(CONST_WIDE, 1, 2L); code.visitStmt3R(ADD_LONG, 0, 0, 1); code.visitStmt0R(RETURN_VOID); code.visitEnd(); } mv.visitEnd(); } } }
b = ubyte(insns, u1offset + 2); c = ubyte(insns, u1offset + 3); dcv.visitStmt3R(op, a, b, c); break; case kFmt32x:
code.visitFieldStmt(SGET_BOOLEAN, 0, -1, f); code.visitConstStmt(CONST, 1, 0xffFFffFF); code.visitStmt3R(ADD_INT, 0, 0, 1); code.visitFieldStmt(SPUT_SHORT, 0, -1, f); code.visitStmt0R(RETURN_VOID);
@Test public static void merge1(DexClassVisitor cv) {// obj = array DexMethodVisitor mv = cv.visitMethod(ACC_PUBLIC | ACC_STATIC, new Method("La;", "b", new String[] {}, "V")); DexCodeVisitor code = mv.visitCode(); DexLabel L0 = new DexLabel(); DexLabel L1 = new DexLabel(); code.visitRegister(3); code.visitConstStmt(CONST, 0, 0); code.visitJumpStmt(GOTO, -1, -1, L1); code.visitLabel(L0); code.visitStmt2R(ARRAY_LENGTH, 1, 0); code.visitConstStmt(CONST, 1, 0); code.visitStmt3R(AGET, 2, 0, 1); code.visitStmt0R(RETURN_VOID); code.visitLabel(L1); code.visitConstStmt(CONST, 1, 1); code.visitTypeStmt(NEW_ARRAY, 0, 1, "[Ljava/security/cert/X509Certificate;"); code.visitJumpStmt(GOTO, -1, -1, L0); code.visitEnd(); mv.visitEnd(); } }
"<init>", new String[] {}, "V")); code.visitConstStmt(CONST, 6, Integer.valueOf(0)); // int: 0x00000000 float:0.000000 code.visitStmt3R(AGET_OBJECT, 6, 4, 6); code.visitMethodStmt(INVOKE_VIRTUAL, new int[] { 5, 6 }, new Method("Ljava/lang/StringBuilder;", "append", new String[] { "Ljava/lang/String;" }, "Ljava/lang/StringBuilder;")); code.visitStmt1R(MOVE_RESULT_OBJECT, 5); code.visitConstStmt(CONST, 6, Integer.valueOf(1)); // int: 0x00000001 float:0.000000 code.visitStmt3R(AGET_OBJECT, 6, 4, 6); code.visitMethodStmt(INVOKE_VIRTUAL, new int[] { 5, 6 }, new Method("Ljava/lang/StringBuilder;", "append", new String[] { "Ljava/lang/String;" }, "Ljava/lang/StringBuilder;")); code.visitStmt1R(MOVE_RESULT_OBJECT, 5); code.visitConstStmt(CONST, 6, Integer.valueOf(2)); // int: 0x00000002 float:0.000000 code.visitStmt3R(AGET_OBJECT, 6, 4, 6); code.visitMethodStmt(INVOKE_VIRTUAL, new int[] { 5, 6 }, new Method("Ljava/lang/StringBuilder;", "append", new String[] { "Ljava/lang/String;" }, "Ljava/lang/StringBuilder;")); code.visitStmt1R(MOVE_RESULT_OBJECT, 5); code.visitConstStmt(CONST, 6, Integer.valueOf(3)); // int: 0x00000003 float:0.000000 code.visitStmt3R(AGET_OBJECT, 6, 4, 6); code.visitMethodStmt(INVOKE_VIRTUAL, new int[] { 5, 6 }, new Method("Ljava/lang/StringBuilder;", "append", new String[] { "Ljava/lang/String;" }, "Ljava/lang/StringBuilder;")); code.visitConstStmt(CONST, 5, Integer.valueOf(4)); // int: 0x00000004 float:0.000000 code.visitLabel(L0); code.visitStmt3R(AGET_OBJECT, 5, 4, 5); code.visitMethodStmt(INVOKE_STATIC, new int[] { 5 }, new Method("Ljava/lang/Integer;", "parseInt", new String[] { "Ljava/lang/String;" }, "I"));
@Override public void accept(DexCodeVisitor cv) { cv.visitStmt3R(op, a, b, c); } }
/** * <pre> * * OP_ADD * OP_SUB * OP_MUL * OP_DIV * OP_REM * OP_AND * OP_OR * OP_XOR * OP_SHL * OP_SHR * OP_USHR * OP_CMPL * OP_CMPG * OP_CMP * OP_AGETX * OP_APUTX * </pre> * */ public void visitStmt3R(Op op, int a, int b, int c) { if (visitor != null) { visitor.visitStmt3R(op, a, b, c); } }
b = ubyte(insns, u1offset + 2); c = ubyte(insns, u1offset + 3); dcv.visitStmt3R(op, a, b, c); break; case kFmt32x: