Example usage for org.objectweb.asm.tree.analysis SimpleVerifier SimpleVerifier

List of usage examples for org.objectweb.asm.tree.analysis SimpleVerifier SimpleVerifier

Introduction

In this page you can find the example usage for org.objectweb.asm.tree.analysis SimpleVerifier SimpleVerifier.

Prototype

public SimpleVerifier() 

Source Link

Document

Constructs a new SimpleVerifier .

Usage

From source file:com.github.fge.grappa.transform.AsmTestUtils.java

License:Apache License

public static void verifyMethodIntegrity(String ownerInternalName, MethodNode method) {
    try {/*from   w w  w  .j  a v  a  2 s  .  com*/
        new Analyzer(new SimpleVerifier()).analyze(ownerInternalName, method);
    } catch (AnalyzerException e) {
        throw new RuntimeException(
                "Integrity error in method '" + method.name + "' of type '" + ownerInternalName + "': ", e);
    }
}

From source file:de.loskutov.bco.asm.DecompiledMethod.java

License:Open Source License

private void analyzeMethod(final ClassLoader cl) {
    Analyzer<BasicValue> a = new Analyzer<BasicValue>(new SimpleVerifier() {

        @Override//from  w  w  w . j  a  v a2 s  .  c  o  m
        protected Class getClass(final Type t) {
            try {
                if (t.getSort() == Type.ARRAY) {
                    return Class.forName(t.getDescriptor().replace('/', '.'), true, cl);
                }
                return cl.loadClass(t.getClassName());
            } catch (ClassNotFoundException e) {
                throw new RuntimeException(e.toString() + " " + cl, e);
            }
        }
    });
    try {
        a.analyze(owner, meth);
    } catch (AnalyzerException e) {
        error = e.getMessage();
        if (error.startsWith("Error at instruction ")) {
            error = error.substring("Error at instruction ".length());
            errorInsn = Integer.parseInt(error.substring(0, error.indexOf(':')));
            error = error.substring(error.indexOf(':') + 2);
        } else {
            BytecodeOutlinePlugin.log(e, IStatus.ERROR);
            error = null;
        }
    }
    frames = a.getFrames();
}

From source file:org.adjective.stout.tools.ClassVerifier.java

License:Apache License

public static void verify(String owner, MethodNode mn) {
    Analyzer a = new Analyzer(new SimpleVerifier());
    try {/*from  www.  j  av a 2 s .  com*/
        System.err.print("Method " + mn.name + (mn.signature == null ? "" : " " + mn.signature));
        a.analyze(owner, mn);
        System.err.println(" : OK");
    } catch (AnalyzerException e) {
        System.err.println(" : ERROR");
        e.printStackTrace();
    } catch (VerifyError e) {
        System.err.println(" : ERROR");
        e.printStackTrace();
    }
}

From source file:org.apache.commons.javaflow.bytecode.transformation.asm.ContinuationMethodAnalyzer.java

License:Apache License

public void visitEnd() {
    if (instructions.size() == 0 || labels.size() == 0) {
        accept(mv);/*  ww  w .  j  a va  2  s.  co  m*/
        return;
    }

    /*
    {
          TraceMethodVisitor mv = new TraceMethodVisitor();
          System.err.println(name + desc);
          for (int j = 0; j < instructions.size(); ++j) {
              ((AbstractInsnNode) instructions.get(j)).accept(mv);
              System.err.print("   " + mv.text.get(j)); // mv.text.get(j));
          }
          System.err.println();
    }
    */

    this.stackRecorderVar = maxLocals;
    try {
        moveNew();

        // analyzer = new Analyzer(new BasicVerifier());
        analyzer = new Analyzer(new SimpleVerifier() {

            protected Class<?> getClass(Type t) {
                try {
                    if (t.getSort() == Type.ARRAY) {
                        return Class.forName(t.getDescriptor().replace('/', '.'), true,
                                Thread.currentThread().getContextClassLoader());
                    }
                    return Class.forName(t.getClassName(), true,
                            Thread.currentThread().getContextClassLoader());
                } catch (ClassNotFoundException e) {
                    throw new RuntimeException(e.toString());
                }
            }
        }) {

            protected Frame newFrame(final int nLocals, final int nStack) {
                return new MonitoringFrame(nLocals, nStack);
            }

            protected Frame newFrame(final Frame src) {
                return new MonitoringFrame(src);
            }

            public Frame[] analyze(final String owner, final MethodNode m) throws AnalyzerException {
                // System.out.println("Analyze: "+owner+"|"+m.name+"|"+m.signature+"|"+m.tryCatchBlocks);
                final Frame[] frames = super.analyze(owner, m);
                for (int i = 0; i < m.instructions.size(); i++) {
                    int opcode = m.instructions.get(i).getOpcode();
                    if (opcode == MONITORENTER || opcode == MONITOREXIT) {
                        // System.out.println(i);
                    }
                }
                return frames;
            }
        };

        analyzer.analyze(className, this);
        accept(new ContinuationMethodAdapter(this));

        /*
        {
              TraceMethodVisitor mv = new TraceMethodVisitor();
              System.err.println("=================");
                
              System.err.println(name + desc);
              for (int j = 0; j < instructions.size(); ++j) {
                  ((AbstractInsnNode) instructions.get(j)).accept(mv);
                  System.err.print("   " + mv.text.get(j)); // mv.text.get(j));
              }
              System.err.println();
        }
        */

    } catch (AnalyzerException ex) {
        // TODO log the error or fail?
        ex.printStackTrace();
        accept(mv);

    }
}

From source file:org.codehaus.groovy.ant.VerifyClass.java

License:Apache License

private boolean readClass(String clazz) throws IOException {
    ClassReader cr = new ClassReader(new FileInputStream(clazz));
    ClassNode ca = new ClassNode() {
        public void visitEnd() {
            //accept(cv);
        }/*from w w w. ja v a 2 s .  c  o m*/
    };
    cr.accept(new CheckClassAdapter(ca), ClassWriter.COMPUTE_MAXS);
    boolean failed = false;

    List methods = ca.methods;
    for (int i = 0; i < methods.size(); ++i) {
        MethodNode method = (MethodNode) methods.get(i);
        if (method.instructions.size() > 0) {
            Analyzer a = new Analyzer(new SimpleVerifier());
            try {
                a.analyze(ca.name, method);
                continue;
            } catch (Exception e) {
                e.printStackTrace();
            }

            if (!failed) {
                failed = true;
                log("verifying of class " + clazz + " failed");
            }
            if (verbose)
                log(method.name + method.desc);

            TraceMethodVisitor mv = new TraceMethodVisitor(null);
            /*= new TraceMethodVisitor(null) {
            public void visitMaxs(int maxStack, int maxLocals) {
                StringBuffer buffer = new StringBuffer();
                for (int i = 0; i < text.size(); ++i) {
                    String s = frames[i] == null ? "null" : frames[i].toString();
                    while (s.length() < maxStack + maxLocals + 1) {
                        s += " ";
                    }
                    buffer.append(Integer.toString(i + 100000).substring(1));
                    buffer.append(" ");
                    buffer.append(s);
                    buffer.append(" : ");
                    buffer.append(text.get(i));
                }
                if (verbose) log(buffer.toString());
            }
            };*/
            for (int j = 0; j < method.instructions.size(); ++j) {
                Object insn = method.instructions.get(j);
                if (insn instanceof AbstractInsnNode) {
                    ((AbstractInsnNode) insn).accept(mv);
                } else {
                    mv.visitLabel((Label) insn);
                }
            }
            mv.visitMaxs(method.maxStack, method.maxLocals);
        }
    }
    return !failed;
}

From source file:util.BytecodeChecker.java

License:Apache License

public static void main(String[] args) {
    String className = args[0];//from w w w . j  av  a2 s .c  o m
    String methodName = args[1];

    try {
        ClassReader cr = new ClassReader(className);
        ClassNode cn = new ClassNode();
        cr.accept(cn, 0);

        for (int i = 0; i < cn.methods.size(); i++) {
            MethodNode mn = (MethodNode) cn.methods.get(i);

            if (mn.name.equals(methodName)) {
                System.out.println("METHOD CODE");
                System.out.println("===========");

                for (int j = 0; j < mn.instructions.size(); j++) {
                    AbstractInsnNode insn = mn.instructions.get(j);
                    System.out.println(String.valueOf(j + 1) + ":" + insn);
                }

                System.out.println("ANALYSIS");
                System.out.println("========");

                Analyzer bca = new Analyzer(new SimpleVerifier());
                bca.analyze(className.replace('.', '/'), mn);
            }
        }
    } catch (Exception ex) {
        System.out.println(ex.getMessage());
        ex.printStackTrace();
    }
}