@Override public void accept(DexCodeVisitor cv) { cv.visitLabel(label); } }
public void visitLabel(DexLabel label) { if (visitor != null) { visitor.visitLabel(label); } }
code.visitLabel(e.getValue()); code.visitConstStmt(Op.CONST_STRING, 0, e.getKey()); code.visitStmt1R(Op.RETURN_OBJECT, 0);
public static void a(DexClassVisitor cv) { DexMethodVisitor mv = cv.visitMethod(ACC_PUBLIC | ACC_STATIC, new Method("La;", "b", new String[] {}, "V")); DexCodeVisitor code = mv.visitCode(); code.visitRegister(2); DexLabel L0 = new DexLabel(); DexLabel L1 = new DexLabel(); DexLabel L2 = new DexLabel(); code.visitTryCatch(L0, L1, new DexLabel[] { L2 }, new String[] { "Lsome/Exception;" }); code.visitLabel(L0); code.visitConstStmt(CONST_STRING, 0, "abc"); code.visitLabel(L1); code.visitMethodStmt(INVOKE_VIRTUAL, new int[] { 0 }, new Method("Ljava/lang/String;", "toString", new String[] {}, "Ljava/lang/String;")); code.visitStmt0R(RETURN_VOID); code.visitLabel(L2); code.visitStmt1R(MOVE_EXCEPTION, 1); code.visitMethodStmt(INVOKE_VIRTUAL, new int[] { 1 }, new Method("Ljava/lang/String;", "toString", new String[] {}, "Ljava/lang/String;")); code.visitStmt0R(RETURN_VOID); code.visitEnd(); mv.visitEnd(); }
@Test public static void i63(DexClassVisitor cv) { DexMethodVisitor mv = cv.visitMethod(ACC_STATIC, new Method("La;", "b", new String[] {}, "V")); if (mv != null) { DexCodeVisitor code = mv.visitCode(); if (code != null) { code.visitRegister(1); DexLabel L1 = new DexLabel(); DexLabel L2 = new DexLabel(); code.visitLabel(L1); code.visitFieldStmt(Op.SGET, 0, -1, new Field("La;", "f", "J")); code.visitLabel(L2); code.visitStmt0R(Op.RETURN_VOID); code.visitEnd(); code.visitTryCatch(L1, L2, new DexLabel[] { L2 }, new String[] { "La;" }); } mv.visitEnd(); } } }
code.visitLabel(goto_2); code.visitLabel(try_start_2); code.visitStmt1R(MOVE_RESULT_OBJECT, v0); code.visitStmt1R(RETURN_OBJECT, v0); code.visitLabel(cond_7); code.visitConstStmt(CONST_STRING, p1, "ISO-8859-1"); code.visitLabel(try_end_9); code.visitJumpStmt(GOTO, -1, -1, goto_2); code.visitLabel(catch_a); code.visitStmt1R(MOVE_EXCEPTION, v0); code.visitTypeStmt(NEW_INSTANCE, v1, -1, "Ljava/lang/IllegalArgumentException;");
@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.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); code.visitLabel(L3); code.visitMethodStmt(INVOKE_STATIC, new int[] { v0 }, new Method("La;", "useBytes", new String[] { "[B" }, "V"));
dcv.visitLabel(labelsMap.get(nextLabelOffset)); nextLabelOffset = labelOffsetIterator.hasNext() ? labelOffsetIterator.next() : null; } else { dcv.visitLabel(labelsMap.get(nextLabelOffset)); if (labelOffsetIterator.hasNext()) { nextLabelOffset = labelOffsetIterator.next();
code.visitRegister(2); code.visitFieldStmt(SGET_OBJECT, v0, -1, new Field("Ljava/lang/System;", "out", "Ljava/io/PrintStream;")); code.visitLabel(try_start); code.visitStmt1R(MONITOR_ENTER, v0); code.visitConstStmt(CONST_STRING, v1, "haha"); code.visitMethodStmt(INVOKE_VIRTUAL, new int[] { v0, v1 }, new Method("Ljava/io/PrintString;", "println", new String[] { "Ljava/lang/String;" }, "V")); code.visitLabel(try_end); code.visitStmt1R(MONITOR_EXIT, v0); code.visitStmt0R(RETURN_VOID); code.visitLabel(catch_a); code.visitStmt1R(MOVE_EXCEPTION, v1); code.visitStmt1R(MONITOR_EXIT, v0);
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.visitStmt2R(MOVE, 2, 4); code.visitLabel(L9); code.visitStmt1R(RETURN_OBJECT, 2); code.visitLabel(L10); code.visitTypeStmt(NEW_INSTANCE, 1, -1, "Lorg/json/JSONObject;"); code.visitMethodStmt(INVOKE_DIRECT, new int[] { 1 }, new Method("Lorg/json/JSONObject;", "<init>", code.visitMethodStmt(INVOKE_VIRTUAL, new int[] { 1, 2, 3 }, new Method("Lorg/json/JSONObject;", "put", new String[] { "Ljava/lang/String;", "Ljava/lang/Object;" }, "Lorg/json/JSONObject;")); code.visitLabel(L1); code.visitMethodStmt(INVOKE_VIRTUAL, new int[] { 1 }, new Method("Lorg/json/JSONObject;", "toString", 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); code.visitMethodStmt(INVOKE_VIRTUAL, new int[] { 1, 2, 3 }, new Method("Lorg/json/JSONObject;", "put", new String[] { "Ljava/lang/String;", "Ljava/lang/Object;" }, "Lorg/json/JSONObject;")); code.visitLabel(L4); code.visitJumpStmt(GOTO, -1, -1, L1);
code.visitLabel(labels[i]); Callback callback = callbacks.get(i); Method mCallback = (Method) callback.callback;
new String[] { "Ljava/lang/String;" }, "V")); code.visitStmt1R(THROW, 5); code.visitLabel(L13); code.visitMethodStmt(INVOKE_VIRTUAL, new int[] { 1 }, new Method("Ljava/util/regex/Matcher;", "group", new String[] {}, "Ljava/lang/String;")); "Ljava/lang/String;")); 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", code.visitFieldStmt(IPUT, 5, 9, new Field("Lorg/apache/commons/net/ftp/FTPClient;", "__passivePort", "I")); code.visitLabel(L1); code.visitStmt0R(RETURN_VOID); code.visitLabel(L2); code.visitStmt1R(MOVE_EXCEPTION, 5); code.visitStmt2R(MOVE, 0, 5);
@Override public void accept(DexCodeVisitor cv) { cv.visitLabel(label); } }
public void visitLabel(DexLabel label) { if (visitor != null) { visitor.visitLabel(label); } }
dcv.visitLabel(labelsMap.get(nextLabelOffset)); nextLabelOffset = labelOffsetIterator.hasNext() ? labelOffsetIterator.next() : null; } else { dcv.visitLabel(labelsMap.get(nextLabelOffset)); if (labelOffsetIterator.hasNext()) { nextLabelOffset = labelOffsetIterator.next();