public DexCodeVisitor visitCode() { if (visitor == null) { return null; } return visitor.visitCode(); }
public void visitEnd() { if (visitor == null) { return; } visitor.visitEnd(); }
public DexAnnotationAble visitParameterAnnotation(int index) { if (visitor == null) { return null; } return visitor.visitParameterAnnotation(index); }
private void genSwitchMethod(DexClassVisitor dcv, String typeNameDesc, String methodName, CB callback) { DexMethodVisitor dmv = dcv .visitMethod(DexConstants.ACC_PUBLIC, new Method(typeNameDesc, methodName, new String[0], "Ljava/lang/String;")); DexCodeVisitor code = dmv.visitCode(); code.visitRegister(3); code.visitFieldStmt(Op.IGET, 0, 2, new Field(typeNameDesc, "idx", "I")); dmv.visitEnd();
@Test public void test3() { DexFileWriter w = new DexFileWriter(); DexClassVisitor cv = w.visit(0x1, "La/c;", null, new String[]{"Ljava/lang/Comparable;"}); cv.visitSource("c.java"); cv.visitAnnotation("LAnn;", Visibility.SYSTEM).visitEnd(); DexFieldVisitor fv = cv.visitField(ACC_PUBLIC | ACC_STATIC, new Field("La/c;", "a", "I"), 55); fv.visitAnnotation("LE;", Visibility.RUNTIME).visitEnd(); fv.visitEnd(); DexMethodVisitor mv = cv.visitMethod(ACC_STATIC, new Method("La/c;", "bb", new String[]{"I"}, "V")); mv.visitAnnotation("Laaa;", Visibility.RUNTIME).visitEnd(); DexAnnotationVisitor dav = mv.visitParameterAnnotation(0).visitAnnotation("Laaa;", Visibility.RUNTIME); dav.visit("abc", true); DexAnnotationVisitor dav2 = dav.visitArray("efg"); dav2.visit("", "123"); dav2.visit("", "456"); dav2.visitEnd(); dav.visitEnd(); DexCodeVisitor code = mv.visitCode(); code.visitRegister(2); code.visitStmt0R(Op.RETURN_VOID); code.visitEnd(); mv.visitEnd(); cv.visitEnd(); w.visitEnd(); w.toByteArray(); }
@Test public void test() { ASMifierFileV fv = new ASMifierFileV(new File("target/asmftest").toPath(), "a.b"); DexClassVisitor cv = fv.visit(ACC_PUBLIC, "La/f;", "Ljava/lang/Object;", null); DexFieldVisitor f2v = cv.visitField(ACC_PUBLIC, new Field("La/f;", "abc", "I"), null); f2v.visitEnd(); DexMethodVisitor mv = cv.visitMethod(ACC_PUBLIC | ACC_STATIC, new Method("La/f;", "zz", new String[0], "I")); DexAnnotationAble pv = mv.visitParameterAnnotation(2); DexAnnotationVisitor dav = pv.visitAnnotation("Leeeff;", Visibility.BUILD); dav.visitEnd(); DexCodeVisitor dcv = mv.visitCode(); dcv.visitConstStmt(Op.FILL_ARRAY_DATA, 0, new int[] { 1, 2, 3 }); dcv.visitStmt0R(Op.RETURN_VOID); dcv.visitEnd(); mv.visitEnd(); cv.visitEnd(); fv.visitEnd(); } }
if (mv != null) { DexAnnotationVisitor av00 = mv.visitAnnotation("Ldalvik/annotation/Throws;", Visibility.RUNTIME); if (av00 != null) { DexCodeVisitor code = mv.visitCode(); if (code != null) { code.visitRegister(11); mv.visitEnd();
public DexAnnotationVisitor visitAnnotation(String name, Visibility visibility) { if (visitor == null) { return null; } return visitor.visitAnnotation(name, visibility); }
@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(); }
for (AnnotationItem annotationItem : encodedMethod.annotationSetItem.annotations) { EncodedAnnotation annotation = annotationItem.annotation; DexAnnotationVisitor aw = mw.visitAnnotation(annotation.type.descriptor.stringData.string, annotationItem.visibility); writeAnnotation(aw, annotation); for (int i = 0; i < annotationSetItems.length; ++i) { AnnotationSetItem annotationSetItem = annotationSetItems[i]; DexAnnotationAble parameterAw = mw.visitParameterAnnotation(i); if (null != annotationSetItem && null != annotationSetItem.annotations) { for (AnnotationItem annotationItem : annotationSetItem.annotations) { writeCode((CodeWriter) mw.visitCode(), encodedMethod.code); mw.visitEnd();
public DexAnnotationVisitor visitAnnotation(String name, Visibility visibility) { if (visitor == null) { return null; } return visitor.visitAnnotation(name, visibility); }
@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(); }
@Override public DexCodeVisitor visitCode() { DexCodeNode codeNode = new DexCodeNode(super.visitCode()); this.codeNode = codeNode; return codeNode; }
public void accept(DexClassVisitor dcv) { DexMethodVisitor mv = dcv.visitMethod(access, method); if (mv != null) { accept(mv); mv.visitEnd(); } }
private void read_annotation_set_ref_list(int parameter_annotation_offset, DexMethodVisitor dmv) { ByteBuffer in = annotationSetRefListIn; in.position(parameter_annotation_offset); int size = in.getInt(); for (int j = 0; j < size; j++) { int param_annotation_offset = in.getInt(); if (param_annotation_offset == 0) { continue; } DexAnnotationAble dpav = dmv.visitParameterAnnotation(j); try { if (dpav != null) { read_annotation_set_item(param_annotation_offset, dpav); } } catch (Exception e) { throw new DexException(e, "while accept parameter annotation in parameter:[%d]", j); } } }
@Test public static void i168(DexClassVisitor cv) { DexMethodVisitor mv = cv.visitMethod(ACC_PUBLIC | ACC_STATIC, new Method("La;", "a", new String[] {}, "I")); DexCodeVisitor code = mv.visitCode(); code.visitRegister(2000); // 2000 locals for (int i = 0; i < 2000; i++) {// 2000 insns code.visitConstStmt(Op.CONST, i, i); } for (int i = 0; i < 18000; i++) {// 18000 insns code.visitConstStmt(Op.CONST, 25, i); } code.visitStmt1R(Op.RETURN, 25); code.visitEnd(); mv.visitEnd(); } }
public void accept(DexMethodVisitor v) { DexCodeVisitor cv = v.visitCode(); if (cv != null) { accept(cv); cv.visitEnd(); } }
public static void acceptMethod(SmaliParser.SMethodContext ctx, String className, DexClassVisitor dexClassVisitor) { Method method; Token methodObj = ctx.methodObj; if (methodObj.getType() == SmaliLexer.METHOD_FULL) { method = Utils.parseMethodAndUnescape(methodObj.getText()); } else {// PART method = Utils.parseMethodAndUnescape(className, methodObj.getText()); } int access = collectAccess(ctx.sAccList()); boolean isStatic = 0 != (access & DexConstants.ACC_STATIC); DexMethodVisitor dexMethodVisitor = dexClassVisitor.visitMethod(access, method); if (dexMethodVisitor != null) { acceptAnnotations(ctx.sAnnotation(), dexMethodVisitor); int ins = Utils.methodIns(method, isStatic); int totalRegisters = findTotalRegisters(ctx, ins); if (totalRegisters < 0) { totalRegisters = ins; } M m = new M(method, totalRegisters, ins, isStatic); acceptParameter(ctx.sParameter(), m, dexMethodVisitor); acceptCode(ctx, m, dexMethodVisitor); dexMethodVisitor.visitEnd(); } }
acceptAnnotations(annotationContexts, dexMethodVisitor.visitParameterAnnotation(index));