List of usage examples for org.objectweb.asm.tree.analysis SimpleVerifier SimpleVerifier
public SimpleVerifier()
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(); } }