public Instrumentor(Class clazz, String btraceClassName, byte[] btraceCode, List<OnMethod> onMethods, ClassVisitor cv) { this(clazz, btraceClassName, new ClassReader(btraceCode), onMethods, cv); }
public static void main(String[] args) throws Exception { if (args.length == 0) { usage("java net.java.btrace.runtime.Verifier <.class file>"); } args[0] = args[0].replace('.', '/'); File file = new File(args[0] + ".class"); if (! file.exists()) { usage("file '" + args[0] + ".class' does not exist"); } FileInputStream fis = new FileInputStream(file); ClassReader reader = new ClassReader(new BufferedInputStream(fis)); Verifier verifier = new Verifier(new ClassVisitor(Opcodes.ASM4){}); reader.accept(verifier, 0); } }
public static void accept(ClassReader reader, ClassVisitor visitor, int flags) { reader.accept(visitor, flags); }
public void visitEnd() { fromClass.accept(new ClassVisitor(Opcodes.ASM4) { public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) { MethodInfo mi = getMethodInfo(name, desc); if (mi != null) { return addMethod(mi.newAccess, mi.newName, desc, signature, exceptions); } else { return null; } } }, 0); super.visitEnd(); }
public boolean isCandidate(byte[] classBytes) { return isCandidate(new ClassReader(classBytes)); }
if (classBytes.containsKey(name)) { dump(name + "_before", classBytes.get(name)); ClassReader cr = new ClassReader(classBytes.get(name)); ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_FRAMES); ClassVisitor cv = new ClassVisitor(Opcodes.ASM4, cw) { cr.accept(new Postprocessor(ctValidator, cv), ClassReader.EXPAND_FRAMES + ClassReader.SKIP_DEBUG); result.put(name, cw.toByteArray()); dump(name + "_after", cw.toByteArray());
public static void main(String[] args) throws Exception { if (args.length != 2) { System.err.println("Usage: java net.java.btrace.runtime.ClassRenamer <class> <new-class-name>"); System.exit(1); } args[0] = args[0].replace('.', '/'); args[1] = args[1].replace('.', '/'); FileInputStream fis = new FileInputStream(args[0] + ".class"); ClassReader reader = new ClassReader(new BufferedInputStream(fis)); FileOutputStream fos = new FileOutputStream(args[1] + ".class"); ClassWriter writer = InstrumentUtils.newClassWriter(); InstrumentUtils.accept(reader, new ClassRenamer(args[1], writer)); fos.write(writer.toByteArray()); } }
if (classBytes.containsKey(name)) { dump(name + "_before", classBytes.get(name)); ClassReader cr = new ClassReader(classBytes.get(name)); ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_FRAMES); ClassVisitor cv = new ClassVisitor(Opcodes.ASM4, cw) { cr.accept(new Postprocessor(ctValidator, cv), ClassReader.EXPAND_FRAMES + ClassReader.SKIP_DEBUG); result.put(name, cw.toByteArray()); dump(name + "_after", cw.toByteArray());
public static void main(final String[] args) throws Exception { if (args.length != 1) { System.err.println("Usage: java net.java.btrace.runtime.CatchInstrumentor <class>"); System.exit(1); } args[0] = args[0].replace('.', '/'); FileInputStream fis = new FileInputStream(args[0] + ".class"); ClassReader reader = new ClassReader(new BufferedInputStream(fis)); FileOutputStream fos = new FileOutputStream(args[0] + ".class"); ClassWriter writer = InstrumentUtils.newClassWriter(); InstrumentUtils.accept(reader, new ClassVisitor(Opcodes.ASM4, writer) { public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) { MethodVisitor mv = super.visitMethod(access, name, desc, signature, exceptions); return new CatchInstrumentor(mv, args[0], args[0], access, name, desc); } }); fos.write(writer.toByteArray()); } }
public static void main(final String[] args) throws Exception { if (args.length != 1) { System.err.println("Usage: java net.java.btrace.runtime.MethodEntryInstrumentor <class>"); System.exit(1); } args[0] = args[0].replace('.', '/'); FileInputStream fis = new FileInputStream(args[0] + ".class"); ClassReader reader = new ClassReader(new BufferedInputStream(fis)); FileOutputStream fos = new FileOutputStream(args[0] + ".class"); ClassWriter writer = InstrumentUtils.newClassWriter(); InstrumentUtils.accept(reader, new ClassVisitor(Opcodes.ASM4, writer) { public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) { MethodVisitor mv = super.visitMethod(access, name, desc, signature, exceptions); return new MethodEntryInstrumentor(mv, args[0], args[0], access, name, desc); } }); fos.write(writer.toByteArray()); } }
public static void main(final String[] args) throws Exception { if (args.length != 1) { System.err.println("Usage: java net.java.btrace.runtime.ArrayAllocInstrumentor <class>"); System.exit(1); } args[0] = args[0].replace('.', '/'); FileInputStream fis = new FileInputStream(args[0] + ".class"); ClassReader reader = new ClassReader(new BufferedInputStream(fis)); FileOutputStream fos = new FileOutputStream(args[0] + ".class"); ClassWriter writer = InstrumentUtils.newClassWriter(); InstrumentUtils.accept(reader, new ClassVisitor(Opcodes.ASM4, writer) { public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) { MethodVisitor mv = super.visitMethod(access, name, desc, signature, exceptions); return new ArrayAllocInstrumentor(mv, args[0], args[0], access, name, desc); } }); fos.write(writer.toByteArray()); } }
public static void main(final String[] args) throws Exception { if (args.length != 1) { System.err.println("Usage: java net.java.btrace.runtime.TypeCheckInstrumentor <class>"); System.exit(1); } args[0] = args[0].replace('.', '/'); FileInputStream fis = new FileInputStream(args[0] + ".class"); ClassReader reader = new ClassReader(new BufferedInputStream(fis)); FileOutputStream fos = new FileOutputStream(args[0] + ".class"); ClassWriter writer = InstrumentUtils.newClassWriter(); InstrumentUtils.accept(reader, new ClassVisitor(Opcodes.ASM4, writer) { public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) { MethodVisitor mv = super.visitMethod(access, name, desc, signature, exceptions); return new TypeCheckInstrumentor(mv, args[0], args[0], access, name, desc); } }); fos.write(writer.toByteArray()); } }
public static void main(final String[] args) throws Exception { if (args.length != 1) { System.err.println("Usage: java net.java.btrace.runtime.MethodReturnInstrumentor <class>"); System.exit(1); } args[0] = args[0].replace('.', '/'); FileInputStream fis = new FileInputStream(args[0] + ".class"); ClassReader reader = new ClassReader(new BufferedInputStream(fis)); FileOutputStream fos = new FileOutputStream(args[0] + ".class"); ClassWriter writer = InstrumentUtils.newClassWriter(); InstrumentUtils.accept(reader, new ClassVisitor(Opcodes.ASM4, writer) { public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) { MethodVisitor mv = super.visitMethod(access, name, desc, signature, exceptions); return new MethodReturnInstrumentor(mv, null, args[0], args[0], access, name, desc); } }); fos.write(writer.toByteArray()); }
public static void main(final String[] args) throws Exception { if (args.length != 1) { System.err.println("Usage: java net.java.btrace.runtime.ThrowInstrumentor <class>"); System.exit(1); } args[0] = args[0].replace('.', '/'); FileInputStream fis = new FileInputStream(args[0] + ".class"); ClassReader reader = new ClassReader(new BufferedInputStream(fis)); FileOutputStream fos = new FileOutputStream(args[0] + ".class"); ClassWriter writer = InstrumentUtils.newClassWriter(); InstrumentUtils.accept(reader, new ClassVisitor(Opcodes.ASM4, writer) { public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) { MethodVisitor mv = super.visitMethod(access, name, desc, signature, exceptions); return new ThrowInstrumentor(mv, args[0], args[0], access, name, desc); } }); fos.write(writer.toByteArray()); } }
public static void main(final String[] args) throws Exception { if (args.length != 1) { System.err.println("Usage: java net.java.btrace.runtime.ErrorReturnInstrumentor <class>"); System.exit(1); } args[0] = args[0].replace('.', '/'); FileInputStream fis = new FileInputStream(args[0] + ".class"); ClassReader reader = new ClassReader(new BufferedInputStream(fis)); FileOutputStream fos = new FileOutputStream(args[0] + ".class"); ClassWriter writer = InstrumentUtils.newClassWriter(); InstrumentUtils.accept(reader, new ClassVisitor(Opcodes.ASM4, writer) { public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) { MethodVisitor mv = super.visitMethod(access, name, desc, signature, exceptions); return new ErrorReturnInstrumentor(mv, null, args[0], args[0], access, name, desc); } }); fos.write(writer.toByteArray()); } }
public static void main(final String[] args) throws Exception { if (args.length != 1) { System.err.println("Usage: java net.java.btrace.runtime.ErrorReturnInstrumentor <class>"); System.exit(1); } args[0] = args[0].replace('.', '/'); FileInputStream fis = new FileInputStream(args[0] + ".class"); ClassReader reader = new ClassReader(new BufferedInputStream(fis)); FileOutputStream fos = new FileOutputStream(args[0] + ".class"); ClassWriter writer = InstrumentUtils.newClassWriter(); InstrumentUtils.accept(reader, new ClassVisitor(Opcodes.ASM4, writer) { public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) { MethodVisitor mv = super.visitMethod(access, name, desc, signature, exceptions); return new MethodEntryExitInstrumentor(mv, null, args[0], args[0], access, name, desc); } }); fos.write(writer.toByteArray()); } }
public static void main(final String[] args) throws Exception { if (args.length != 1) { System.err.println("Usage: java net.java.btrace.runtime.MethodCallInstrumentor <class>"); System.exit(1); } args[0] = args[0].replace('.', '/'); FileInputStream fis = new FileInputStream(args[0] + ".class"); ClassReader reader = new ClassReader(new BufferedInputStream(fis)); FileOutputStream fos = new FileOutputStream(args[0] + ".class"); ClassWriter writer = InstrumentUtils.newClassWriter(); InstrumentUtils.accept(reader, new ClassVisitor(Opcodes.ASM4, writer) { public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) { MethodVisitor mv = super.visitMethod(access, name, desc, signature, exceptions); return new MethodCallInstrumentor(mv, args[0], args[0], access, name, desc); } }); fos.write(writer.toByteArray()); } }
public static void main(final String[] args) throws Exception { if (args.length != 1) { System.err.println("Usage: java net.java.btrace.runtime.LineNumberInstrumentor <class>"); System.exit(1); } args[0] = args[0].replace('.', '/'); FileInputStream fis = new FileInputStream(args[0] + ".class"); ClassReader reader = new ClassReader(new BufferedInputStream(fis)); FileOutputStream fos = new FileOutputStream(args[0] + ".class"); ClassWriter writer = InstrumentUtils.newClassWriter(); InstrumentUtils.accept(reader, new ClassVisitor(Opcodes.ASM4, writer) { public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) { MethodVisitor mv = super.visitMethod(access, name, desc, signature, exceptions); return new LineNumberInstrumentor(mv, args[0], args[0], access, name, desc); } }); fos.write(writer.toByteArray()); } }
ClassReader reader = new ClassReader(new BufferedInputStream(fis)); FileOutputStream fos = new FileOutputStream(args[0] + ".class"); ClassWriter writer = InstrumentUtils.newClassWriter();
args[1] = args[1].replace('.', '/'); FileInputStream fis1 = new FileInputStream(args[0] + ".class"); ClassReader reader1 = new ClassReader(new BufferedInputStream(fis1)); FileInputStream fis2 = new FileInputStream(args[1] + ".class"); ClassReader reader2 = new ClassReader(new BufferedInputStream(fis2)); FileOutputStream fos = new FileOutputStream(args[1] + ".class"); ClassWriter writer = InstrumentUtils.newClassWriter();