Search in sources :

Example 1 with MethodNode

use of jdk.internal.org.objectweb.asm.tree.MethodNode in project OSJR by zeruth.

the class CanvasInjector method setSuper.

public static void setSuper(ClassNode node, String superClass) {
    String replaced = "";
    if (!node.superName.equals(""))
        replaced = node.superName;
    if (!replaced.equals("")) {
        for (Object o : node.methods) {
            final MethodNode mn = (MethodNode) o;
            final ListIterator<?> listIt = mn.instructions.iterator();
            while (listIt.hasNext()) {
                final AbstractInsnNode ain = (AbstractInsnNode) listIt.next();
                if (ain.getOpcode() == Opcodes.INVOKESPECIAL) {
                    final MethodInsnNode call = (MethodInsnNode) ain;
                    if (call.owner.equals(replaced))
                        call.owner = superClass;
                }
            }
        }
    }
    node.superName = superClass;
}
Also used : MethodNode(jdk.internal.org.objectweb.asm.tree.MethodNode) MethodInsnNode(jdk.internal.org.objectweb.asm.tree.MethodInsnNode) AbstractInsnNode(jdk.internal.org.objectweb.asm.tree.AbstractInsnNode)

Example 2 with MethodNode

use of jdk.internal.org.objectweb.asm.tree.MethodNode in project Bytecoder by mirkosertic.

the class CheckClassAdapter method verify.

/**
 * Checks a given class.
 *
 * @param cr
 *            a <code>ClassReader</code> that contains bytecode for the
 *            analysis.
 * @param loader
 *            a <code>ClassLoader</code> which will be used to load
 *            referenced classes. This is useful if you are verifiying
 *            multiple interdependent classes.
 * @param dump
 *            true if bytecode should be printed out not only when errors
 *            are found.
 * @param pw
 *            write where results going to be printed
 */
public static void verify(final ClassReader cr, final ClassLoader loader, final boolean dump, final PrintWriter pw) {
    ClassNode cn = new ClassNode();
    cr.accept(new CheckClassAdapter(cn, false), ClassReader.SKIP_DEBUG);
    Type syperType = cn.superName == null ? null : Type.getObjectType(cn.superName);
    List<MethodNode> methods = cn.methods;
    List<Type> interfaces = new ArrayList<Type>();
    for (Iterator<String> i = cn.interfaces.iterator(); i.hasNext(); ) {
        interfaces.add(Type.getObjectType(i.next()));
    }
    for (int i = 0; i < methods.size(); ++i) {
        MethodNode method = methods.get(i);
        SimpleVerifier verifier = new SimpleVerifier(Type.getObjectType(cn.name), syperType, interfaces, (cn.access & Opcodes.ACC_INTERFACE) != 0);
        Analyzer<BasicValue> a = new Analyzer<BasicValue>(verifier);
        if (loader != null) {
            verifier.setClassLoader(loader);
        }
        try {
            a.analyze(cn.name, method);
            if (!dump) {
                continue;
            }
        } catch (Exception e) {
            e.printStackTrace(pw);
        }
        printAnalyzerResult(method, a, pw);
    }
    pw.flush();
}
Also used : ClassNode(jdk.internal.org.objectweb.asm.tree.ClassNode) SimpleVerifier(jdk.internal.org.objectweb.asm.tree.analysis.SimpleVerifier) ArrayList(java.util.ArrayList) Analyzer(jdk.internal.org.objectweb.asm.tree.analysis.Analyzer) BasicValue(jdk.internal.org.objectweb.asm.tree.analysis.BasicValue) Type(jdk.internal.org.objectweb.asm.Type) MethodNode(jdk.internal.org.objectweb.asm.tree.MethodNode)

Example 3 with MethodNode

use of jdk.internal.org.objectweb.asm.tree.MethodNode in project CorfuDB by CorfuDB.

the class Utils method printByteCode.

public static String printByteCode(byte[] bytes) {
    ClassReader cr = new ClassReader(bytes);
    ClassNode cn = new ClassNode();
    cr.accept(cn, 0);
    final List<MethodNode> methods = cn.methods;
    StringBuilder sb = new StringBuilder();
    for (MethodNode m : methods) {
        InsnList inList = m.instructions;
        sb.append(m.name);
        for (int i = 0; i < inList.size(); i++) {
            sb.append(insnToString(inList.get(i)));
        }
    }
    return sb.toString();
}
Also used : ClassNode(jdk.internal.org.objectweb.asm.tree.ClassNode) MethodNode(jdk.internal.org.objectweb.asm.tree.MethodNode) ClassReader(jdk.internal.org.objectweb.asm.ClassReader) InsnList(jdk.internal.org.objectweb.asm.tree.InsnList)

Example 4 with MethodNode

use of jdk.internal.org.objectweb.asm.tree.MethodNode in project jdk8u_jdk by JetBrains.

the class CheckClassAdapter method verify.

/**
     * Checks a given class.
     *
     * @param cr
     *            a <code>ClassReader</code> that contains bytecode for the
     *            analysis.
     * @param loader
     *            a <code>ClassLoader</code> which will be used to load
     *            referenced classes. This is useful if you are verifiying
     *            multiple interdependent classes.
     * @param dump
     *            true if bytecode should be printed out not only when errors
     *            are found.
     * @param pw
     *            write where results going to be printed
     */
public static void verify(final ClassReader cr, final ClassLoader loader, final boolean dump, final PrintWriter pw) {
    ClassNode cn = new ClassNode();
    cr.accept(new CheckClassAdapter(cn, false), ClassReader.SKIP_DEBUG);
    Type syperType = cn.superName == null ? null : Type.getObjectType(cn.superName);
    List<MethodNode> methods = cn.methods;
    List<Type> interfaces = new ArrayList<Type>();
    for (Iterator<String> i = cn.interfaces.iterator(); i.hasNext(); ) {
        interfaces.add(Type.getObjectType(i.next()));
    }
    for (int i = 0; i < methods.size(); ++i) {
        MethodNode method = methods.get(i);
        SimpleVerifier verifier = new SimpleVerifier(Type.getObjectType(cn.name), syperType, interfaces, (cn.access & Opcodes.ACC_INTERFACE) != 0);
        Analyzer<BasicValue> a = new Analyzer<BasicValue>(verifier);
        if (loader != null) {
            verifier.setClassLoader(loader);
        }
        try {
            a.analyze(cn.name, method);
            if (!dump) {
                continue;
            }
        } catch (Exception e) {
            e.printStackTrace(pw);
        }
        printAnalyzerResult(method, a, pw);
    }
    pw.flush();
}
Also used : ClassNode(jdk.internal.org.objectweb.asm.tree.ClassNode) SimpleVerifier(jdk.internal.org.objectweb.asm.tree.analysis.SimpleVerifier) ArrayList(java.util.ArrayList) Analyzer(jdk.internal.org.objectweb.asm.tree.analysis.Analyzer) BasicValue(jdk.internal.org.objectweb.asm.tree.analysis.BasicValue) Type(jdk.internal.org.objectweb.asm.Type) MethodNode(jdk.internal.org.objectweb.asm.tree.MethodNode)

Aggregations

MethodNode (jdk.internal.org.objectweb.asm.tree.MethodNode)4 ClassNode (jdk.internal.org.objectweb.asm.tree.ClassNode)3 ArrayList (java.util.ArrayList)2 Type (jdk.internal.org.objectweb.asm.Type)2 Analyzer (jdk.internal.org.objectweb.asm.tree.analysis.Analyzer)2 BasicValue (jdk.internal.org.objectweb.asm.tree.analysis.BasicValue)2 SimpleVerifier (jdk.internal.org.objectweb.asm.tree.analysis.SimpleVerifier)2 ClassReader (jdk.internal.org.objectweb.asm.ClassReader)1 AbstractInsnNode (jdk.internal.org.objectweb.asm.tree.AbstractInsnNode)1 InsnList (jdk.internal.org.objectweb.asm.tree.InsnList)1 MethodInsnNode (jdk.internal.org.objectweb.asm.tree.MethodInsnNode)1