@Override public void accept(DexCodeVisitor cv) { cv.visitStmt2R(op, a, b); } }
case kFmt12x: a = ubyte(insns, u1offset + 1); dcv.visitStmt2R(op, a & 0xF, a >> 4); break; a = ubyte(insns, u1offset + 1); b = ushort(insns, u1offset + 2); dcv.visitStmt2R(op, a, b); break; case kFmt23x: a = ushort(insns, u1offset + 2); b = ushort(insns, u1offset + 4); dcv.visitStmt2R(op, a, b); break; case kFmt11n:
/** * <pre> * OP_MOVE* * a = a X b * OP_ARRAY_LENGTH * a=Xb * X_TO_Y * </pre> * * @param op * @param a * @param b */ public void visitStmt2R(Op op, int a, int b) { if (visitor != null) { visitor.visitStmt2R(op, a, b); } }
code.visitLabel(L2); code.visitStmt1R(MOVE_EXCEPTION, 5); code.visitStmt2R(MOVE, 0, 5);
@Test public static void a120(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.visitMethodStmt(INVOKE_VIRTUAL, new int[] { 0 }, new Method("Ljava/lang/String;", "toString", new String[] {}, "Ljava/lang/String;")); code.visitConstStmt(CONST, 1, Integer.valueOf(0)); code.visitStmt2R(ARRAY_LENGTH, 2, 1); code.visitStmt0R(RETURN_VOID); code.visitEnd(); mv.visitEnd(); }
case kFmt12x: a = ubyte(insns, u1offset + 1); dcv.visitStmt2R(op, a & 0xF, a >> 4); break; a = ubyte(insns, u1offset + 1); b = ushort(insns, u1offset + 2); dcv.visitStmt2R(op, a, b); break; case kFmt23x: a = ushort(insns, u1offset + 2); b = ushort(insns, u1offset + 4); dcv.visitStmt2R(op, a, b); break; case kFmt11n:
if (!isStatic) { if (i != argStart) { dcv.visitStmt2R(Op.MOVE_OBJECT, i, argStart);
int argStart = 4; if (haveThis) { dcv.visitStmt2R(Op.MOVE_OBJECT, 0, argStart); argStart++; } else {
case 'L': case '[': dcv.visitStmt2R(Op.MOVE_OBJECT, from, to); break; case 'Z':
@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(); } }
code.visitLabel(L8); code.visitConstStmt(CONST_STRING, 2, ""); code.visitStmt2R(MOVE, 2, 4); code.visitLabel(L9); code.visitStmt1R(RETURN_OBJECT, 2); code.visitLabel(L2); code.visitStmt1R(MOVE_EXCEPTION, 2); code.visitStmt2R(MOVE, 0, 2); code.visitStmt2R(MOVE, 2, 4); code.visitJumpStmt(GOTO, -1, -1, L9); code.visitLabel(L5); code.visitConstStmt(CONST_STRING, 2, ""); code.visitLabel(L6); code.visitStmt2R(MOVE, 2, 4); code.visitJumpStmt(GOTO, -1, -1, L9);
@Override public void accept(DexCodeVisitor cv) { cv.visitStmt2R(op, a, b); } }
/** * <pre> * OP_MOVE* * a = a X b * OP_ARRAY_LENGTH * a=Xb * X_TO_Y * </pre> * * @param op * @param a * @param b */ public void visitStmt2R(Op op, int a, int b) { if (visitor != null) { visitor.visitStmt2R(op, a, b); } }