public void visitTypeInsn(int opcode, String type) {
super.visitTypeInsn(opcode, cleanType(type));
}
}
final ClassVisitor stagerVisitor = new ClassAdapter(cw) {
public void visit(int version, int access, String name, String signature, String superName, String[] interfaces) {
super.visit(version, access, classname, signature, "java/lang/ClassLoader", interfaces);
}
public void visitEnd() {
// not the end!
}
public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) {
// strip constructors
if (name.equals("<init>")) {
return null;
}
return new MyMethodVisitor(super.visitMethod(access, name, desc, signature, exceptions), classname);
}
};
visitClass(Class.forName("javapayload.stager." + stager), stagerVisitor, cw);
final ClassVisitor stagerBaseVisitor = new ClassAdapter(cw) {
public void visit(int version, int access, String name, String signature, String superName, String[] interfaces) {
// not the beginning!
}
public void visitEnd() {
// not the end!
}
public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) {
// strip abstract bootstrap method
if (name.equals("bootstrap") && (access & Opcodes.ACC_ABSTRACT) != 0) {
return null;
}
return new MyMethodVisitor(super.visitMethod(access, name, desc, signature, exceptions), classname);
}
};
visitClass(Stager.class, stagerBaseVisitor, cw);
final ClassVisitor loaderVisitor = new ClassAdapter(cw) {
public void visit(int version, int access, String name, String signature, String superName, String[] interfaces) {
// not the beginning!
}
public FieldVisitor visitField(int access, String name, String desc, String signature, Object value) {