List of usage examples for org.objectweb.asm.tree.analysis BasicVerifier BasicVerifier
public BasicVerifier()
From source file:com.googlecode.dex2jar.test.TestUtils.java
License:Apache License
@SuppressWarnings("rawtypes") public static void verify(final ClassReader cr, PrintWriter out) throws AnalyzerException, IllegalArgumentException, IllegalAccessException { ClassNode cn = new ClassNode(); cr.accept(new CheckClassAdapter(cn, false), ClassReader.SKIP_DEBUG); List methods = cn.methods;// ww w. j a v a 2 s .co m for (int i = 0; i < methods.size(); ++i) { MethodNode method = (MethodNode) methods.get(i); List tryCatchBlocks = method.tryCatchBlocks; for (int j = 0; j < tryCatchBlocks.size(); j++) { TryCatchBlockNode tcn = (TryCatchBlockNode) tryCatchBlocks.get(j); if (tcn.start.equals(tcn.end)) { throw new DexException("try/catch block %d in %s has same start(%s) and end(%s)", j, method.name, tcn.start.getLabel(), tcn.end.getLabel()); } } BasicVerifier verifier = new BasicVerifier(); Analyzer a = new Analyzer(verifier); try { a.analyze(cn.name, method); } catch (Exception e) { out.println(cr.getClassName() + "." + method.name + method.desc); printAnalyzerResult(method, a, out); e.printStackTrace(out); out.flush(); throw new DexException("method " + method.name + " " + method.desc, e); } } }
From source file:com.googlecode.dex2jar.tools.AsmVerify.java
License:Apache License
@Override protected void doCommandLine() throws Exception { if (remainingArgs.length < 1) { usage();/* www . ja v a2 s. c om*/ return; } List<Path> files = new ArrayList<>(); for (String fn : remainingArgs) { Path file = new File(fn).toPath(); if (!Files.exists(file)) { System.err.println(fn + " is not exists"); usage(); return; } files.add(file); } for (Path file : files) { System.out.println("verify " + file); walkJarOrDir(file, new FileVisitorX() { @Override public void visitFile(Path file, Path relative) throws IOException { if (file.getFileName().toString().endsWith(".class")) { ClassReader cr = new ClassReader(Files.readAllBytes(file)); ClassNode cn = new ClassNode(); cr.accept(new CheckClassAdapter(cn, false), ClassReader.SKIP_DEBUG); for (MethodNode method : cn.methods) { BasicVerifier verifier = new BasicVerifier(); Analyzer<BasicValue> a = new Analyzer<>(verifier); try { a.analyze(cn.name, method); } catch (Exception ex) { System.err.println("Error verify method " + cr.getClassName() + "." + method.name + " " + method.desc); if (detail) { ex.printStackTrace(System.err); printAnalyzerResult(method, a, new PrintWriter( new OutputStreamWriter(System.err, StandardCharsets.UTF_8))); } } } } } }); } }
From source file:de.unisb.cs.st.javaslicer.tracer.instrumentation.Transformer.java
License:Open Source License
private boolean checkClass(final byte[] newClassfileBuffer, final String classname, byte[] origClassfileBuffer) { final ClassNode cn = new ClassNode(); final ClassReader cr = new ClassReader(newClassfileBuffer); //cr.accept(new CheckClassAdapter(cn), ClassReader.SKIP_DEBUG); cr.accept(new CheckClassAdapter(cn), 0); for (final Object methodObj : cn.methods) { final MethodNode method = (MethodNode) methodObj; final Analyzer a = new Analyzer(new BasicVerifier()); // SimpleVerifier has problems with sub-classes, e.g. you cannot use PrintStream for Appendable and so on... //final Analyzer a = new Analyzer(new SimpleVerifier( // Type.getObjectType(cn.name), Type.getObjectType(cn.superName), // (cn.access & Opcodes.ACC_INTERFACE) != 0)); try {// ww w .j a v a2s . c o m a.analyze(cn.name, method); } catch (final AnalyzerException e) { System.err.println("Error in method " + classname + "." + method.name + method.desc + ": " + e); //e.printStackTrace(System.err); printMethod(a, System.err, method); if (newClassfileBuffer == origClassfileBuffer) { System.err.println("This is the original bytecode!"); } else { System.err.println("original bytecode:"); ClassReader origClassReader = new ClassReader(origClassfileBuffer); ClassNode origClassNode = new ClassNode(); origClassReader.accept(origClassNode, 0); for (Object origMethodObj : origClassNode.methods) { MethodNode origMethod = (MethodNode) origMethodObj; if (origMethod.name.equals(method.name) && origMethod.desc.equals(method.desc)) printMethod(System.err, origMethod); } } return false; } } return true; }
From source file:de.unisb.cs.st.javaslicer.tracer.instrumentation.Transformer.java
License:Open Source License
@SuppressWarnings("unused") private static void printClass(final byte[] classfileBuffer, final String classname) { /*//from ww w . j a v a 2 s.co m final TraceClassVisitor v = new TraceClassVisitor(new PrintWriter(System.out)); new ClassReader(classfileBuffer).accept(v, ClassReader.SKIP_DEBUG); */ final ClassNode cn = new ClassNode(); final ClassReader cr = new ClassReader(classfileBuffer); //cr.accept(new CheckClassAdapter(cn), ClassReader.SKIP_DEBUG); cr.accept(new CheckClassAdapter(cn), 0); for (final Object methodObj : cn.methods) { final MethodNode method = (MethodNode) methodObj; final Analyzer a = new Analyzer(new BasicVerifier()); //final Analyzer a = new Analyzer(new SimpleVerifier()); try { a.analyze(cn.name, method); } catch (final AnalyzerException e) { System.err.println("// error in method " + classname + "." + method.name + method.desc + ":" + e); } printMethod(a, System.err, method); } }
From source file:pku.sei.checkedcoverage.tracer.instrumentation.Transformer.java
License:Creative Commons License
private boolean checkClass(final byte[] newClassfileBuffer, final String classname) { final ClassNode cn = new ClassNode(); final ClassReader cr = new ClassReader(newClassfileBuffer); //cr.accept(new CheckClassAdapter(cn), ClassReader.SKIP_DEBUG); cr.accept(new CheckClassAdapter(cn), 0); for (final Object methodObj : cn.methods) { final MethodNode method = (MethodNode) methodObj; final Analyzer a = new Analyzer(new BasicVerifier()); // SimpleVerifier has problems with sub-classes, e.g. you cannot use PrintStream for Appendable and so on... //final Analyzer a = new Analyzer(new SimpleVerifier( // Type.getObjectType(cn.name), Type.getObjectType(cn.superName), // (cn.access & Opcodes.ACC_INTERFACE) != 0)); try {// www . j a v a 2s. c o m a.analyze(cn.name, method); } catch (final AnalyzerException e) { System.err.println("Error in method " + classname + "." + method.name + method.desc + ":"); e.printStackTrace(System.err); printMethod(a, System.err, method); return false; } } return true; }