@Override public void accept(DexCodeVisitor cv) { cv.visitFieldStmt(op, a, b, field); } }
/** * <pre> * OP_IGETX a,b field * OP_IPUTX a,b field * OP_SGETX a field * OP_SPUTX a field * </pre> * * @param op * @param a * @param b * @param field */ public void visitFieldStmt(Op op, int a, int b, Field field) { if (visitor != null) { visitor.visitFieldStmt(op, a, b, field); } }
DexCodeVisitor code = dmv.visitCode(); code.visitRegister(3); code.visitFieldStmt(Op.IGET, 0, 2, new Field(typeNameDesc, "idx", "I"));
DexCodeVisitor codeVisitor = mv.visitCode(); codeVisitor.visitRegister(4); codeVisitor.visitFieldStmt(Op.IPUT_OBJECT, 1, 0, new Field(typeNameDesc, "thiz", "Ljava/lang/Object;")); codeVisitor.visitFieldStmt(Op.IPUT_OBJECT, 2, 0, new Field(typeNameDesc, "args", "[Ljava/lang/Object;")); codeVisitor.visitFieldStmt(Op.IPUT, 3, 0, new Field(typeNameDesc, "idx", "I")); codeVisitor.visitStmt0R(Op.RETURN_VOID); codeVisitor.visitEnd(); DexCodeVisitor code = mv.visitCode(); code.visitRegister(2); code.visitFieldStmt(Op.IGET, 0, 1, new Field(typeNameDesc, "args", "[Ljava/lang/Object;")); code.visitStmt1R(Op.RETURN_OBJECT, 0); DexCodeVisitor code = mv.visitCode(); code.visitRegister(2); code.visitFieldStmt(Op.IGET, 0, 1, new Field(typeNameDesc, "thiz", "Ljava/lang/Object;")); code.visitStmt1R(Op.RETURN_OBJECT, 0); code.visitEnd(); code.visitFieldStmt(Op.IGET, 0, 3, new Field(typeNameDesc, "thiz", "Ljava/lang/Object;")); code.visitFieldStmt(Op.IGET, 1, 3, new Field(typeNameDesc, "args", "[Ljava/lang/Object;")); code.visitFieldStmt(Op.IGET, 2, 3, new Field(typeNameDesc, "idx", "I"));
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); code.visitEnd();
break; case kIndexFieldRef: dcv.visitFieldStmt(op, a, -1, getField(b)); break; case kIndexTypeRef: switch (op.indexType) { case kIndexFieldRef: dcv.visitFieldStmt(op, a & 0xF, a >> 4, getField(b)); break; case kIndexTypeRef:
@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.visitConstStmt(CONST_STRING, 4, ""); 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.visitFieldStmt(IGET, 3, 5, new Field("LJSResponseTest;", "className", "Ljava/lang/String;")); 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.visitFieldStmt(IGET, 3, 5, new Field("LJSResponseTest;", "methodName", "Ljava/lang/String;")); 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.visitFieldStmt(IGET, 3, 5, new Field("LJSResponseTest;", "result", "I")); code.visitMethodStmt(INVOKE_VIRTUAL, new int[] { 1, 2, 3 }, new Method("Lorg/json/JSONObject;", "put", new String[] { "Ljava/lang/String;", "I" }, "Lorg/json/JSONObject;")); code.visitFieldStmt(IGET, 2, 5, new Field("LJSResponseTest;", "response", "Ljava/lang/Object;")); code.visitJumpStmt(IF_EQZ, 2, -1, L3); code.visitFieldStmt(IGET, 3, 5, new Field("LJSResponseTest;", "response", "Ljava/lang/Object;")); 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.visitJumpStmt(GOTO, -1, -1, L9); code.visitLabel(L3);
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, 8, "Could not parse passive host information.\nServer Reply: "); code.visitFieldStmt(SGET_OBJECT, 5,-1, new Field("Lorg/apache/commons/net/ftp/FTPClient;", "__parms_pat", "Ljava/util/regex/Pattern;")); code.visitMethodStmt(INVOKE_VIRTUAL, new int[] { 5, 10 }, new Method("Ljava/util/regex/Pattern;", "toString", new String[] {}, "Ljava/lang/String;")); code.visitStmt1R(MOVE_RESULT, 5); code.visitFieldStmt(IPUT, 5, 9, new Field("Lorg/apache/commons/net/ftp/FTPClient;", "__passiveHost", "Ljava/lang/String;")); code.visitConstStmt(CONST, 5, Integer.valueOf(4)); // int: 0x00000004 float:0.000000 code.visitFieldStmt(IPUT, 5, 9, new Field("Lorg/apache/commons/net/ftp/FTPClient;", "__passivePort", "I")); code.visitLabel(L1);
@Override public void accept(DexCodeVisitor cv) { cv.visitFieldStmt(op, a, b, field); } }
/** * <pre> * OP_IGETX a,b field * OP_IPUTX a,b field * OP_SGETX a field * OP_SPUTX a field * </pre> * * @param op * @param a * @param b * @param field */ public void visitFieldStmt(Op op, int a, int b, Field field) { if (visitor != null) { visitor.visitFieldStmt(op, a, b, field); } }
break; case kIndexFieldRef: dcv.visitFieldStmt(op, a, -1, getField(b)); break; case kIndexTypeRef: switch (op.indexType) { case kIndexFieldRef: dcv.visitFieldStmt(op, a & 0xF, a >> 4, getField(b)); break; case kIndexTypeRef: