@Override public void accept(DexCodeVisitor cv) { cv.visitJumpStmt(op, a, b, label); } }
/** * <pre> * OP_IF_EQ * OP_IF_NE * OP_IF_LT * OP_IF_GE * OP_IF_GT * OP_IF_LE * OP_GOTO * OP_IF_EQZ * OP_IF_NEZ * OP_IF_LTZ * OP_IF_GEZ * OP_IF_GTZ * OP_IF_LEZ * </pre> * * @param op * @param a * @param b * @param label */ public void visitJumpStmt(Op op, int a, int b, DexLabel label) { if (visitor != null) { visitor.visitJumpStmt(op, a, b, label); } }
dcv.visitJumpStmt(op, -1, -1, labelsMap.get(target)); break; case kFmt20t: target = offset + sshort(insns, u1offset + 2); dcv.visitJumpStmt(op, -1, -1, labelsMap.get(target)); break; case kFmt21t: target = offset + sshort(insns, u1offset + 2); dcv.visitJumpStmt(op, ubyte(insns, u1offset + 1), -1, labelsMap.get(target)); break; case kFmt22t: case IF_LE: dcv.visitJumpStmt(Op.GOTO, 0, 0, labelsMap.get(target)); ignore = true; break; dcv.visitJumpStmt(op, b, c, labelsMap.get(target)); dcv.visitJumpStmt(op, -1, -1, labelsMap.get(target)); break; case kFmt31t:
@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(); } }
DexLabel L3 = new DexLabel(); code.visitConstStmt(CONST, v0, 0); code.visitJumpStmt(IF_EQ, v0, v0, L2); code.visitLabel(L1); code.visitStmt1R(RETURN_OBJECT, v0); code.visitLabel(L2); code.visitJumpStmt(IF_EQ, v0, v0, L3); code.visitMethodStmt(INVOKE_STATIC, new int[0], new Method("La;", "getBytes", new String[0], "[B")); code.visitStmt1R(MOVE_RESULT_OBJECT, v0); "[Ljava/lang/Object;")); code.visitStmt1R(MOVE_RESULT, v0); code.visitJumpStmt(GOTO, -1, -1, L1); code.visitEnd();
code.visitLabel(L0); code.visitFieldStmt(IGET, 2, 5, new Field("LJSResponseTest;", "className", "Ljava/lang/String;")); code.visitJumpStmt(IF_EQZ, 2, -1, L8); code.visitFieldStmt(IGET, 2, 5, new Field("LJSResponseTest;", "methodName", "Ljava/lang/String;")); code.visitJumpStmt(IF_NEZ, 2, -1, L10); code.visitLabel(L8); code.visitConstStmt(CONST_STRING, 2, ""); code.visitJumpStmt(IF_EQZ, 2, -1, L3); new String[] {}, "Ljava/lang/String;")); code.visitStmt1R(MOVE_RESULT_OBJECT, 2); code.visitJumpStmt(GOTO, -1, -1, L9); code.visitLabel(L3); code.visitFieldStmt(IGET, 2, 5, new Field("LJSResponseTest;", "dataResponse", "[B")); code.visitJumpStmt(IF_EQZ, 2, -1, L5); new String[] { "Ljava/lang/String;", "Ljava/lang/Object;" }, "Lorg/json/JSONObject;")); code.visitLabel(L4); code.visitJumpStmt(GOTO, -1, -1, L1); code.visitLabel(L2); code.visitStmt1R(MOVE_EXCEPTION, 2); 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);
code.visitJumpStmt(IF_EQZ, p1, -1, cond_7); code.visitJumpStmt(GOTO, -1, -1, goto_2); code.visitLabel(catch_a); code.visitStmt1R(MOVE_EXCEPTION, v0);
code.visitStmt1R(MOVE_RESULT, 5); DexLabel L13 = new DexLabel(); code.visitJumpStmt(IF_NEZ, 5, -1,L13);
@Override public void accept(DexCodeVisitor cv) { cv.visitJumpStmt(op, a, b, label); } }
/** * <pre> * OP_IF_EQ * OP_IF_NE * OP_IF_LT * OP_IF_GE * OP_IF_GT * OP_IF_LE * OP_GOTO * OP_IF_EQZ * OP_IF_NEZ * OP_IF_LTZ * OP_IF_GEZ * OP_IF_GTZ * OP_IF_LEZ * </pre> * * @param op * @param a * @param b * @param label */ public void visitJumpStmt(Op op, int a, int b, DexLabel label) { if (visitor != null) { visitor.visitJumpStmt(op, a, b, label); } }
dcv.visitJumpStmt(op, -1, -1, labelsMap.get(target)); break; case kFmt20t: target = offset + sshort(insns, u1offset + 2); dcv.visitJumpStmt(op, -1, -1, labelsMap.get(target)); break; case kFmt21t: target = offset + sshort(insns, u1offset + 2); dcv.visitJumpStmt(op, ubyte(insns, u1offset + 1), -1, labelsMap.get(target)); break; case kFmt22t: case IF_LE: dcv.visitJumpStmt(Op.GOTO, 0, 0, labelsMap.get(target)); ignore = true; break; dcv.visitJumpStmt(op, b, c, labelsMap.get(target)); dcv.visitJumpStmt(op, -1, -1, labelsMap.get(target)); break; case kFmt31t: