private void dumpMethod(BufferedWriter writer, DexMethodNode dexMethodNode, Exception ex) throws IOException { writer.append(dexMethodNode.method.toString()); writer.newLine(); writer.flush(); ex.printStackTrace(new PrintWriter(writer, true)); writer.newLine(); new BaksmaliDumper().baksmaliMethod(dexMethodNode, writer); writer.flush(); }
public void to(final Path base) { final BaksmaliDumper bs = new BaksmaliDumper(parameterRegisters, useLocals); reader.accept(new BaksmaliDexFileVisitor(base, bs), this.noDebug ? DexFileReader.SKIP_CODE : 0); }
private static String pbaksmali(DexClassNode dcn) throws IOException { StringWriter bufWriter = new StringWriter(); BufferedWriter w = new BufferedWriter(bufWriter); new BaksmaliDumper(true, true).baksmaliClass(dcn, new BaksmaliDumpOut(w)); w.flush(); bufWriter.flush(); return bufWriter.toString(); }
public static String toStd(DexClassNode expected) throws IOException { StringWriter stringWriter = new StringWriter(); BufferedWriter bufferedWriter = new BufferedWriter(stringWriter); BaksmaliDumpOut out = new BaksmaliDumpOut(bufferedWriter); final BaksmaliDumper bs = new BaksmaliDumper(true, false); bs.baksmaliClass(expected, out); bufferedWriter.close(); return stringWriter.toString(); } }
@Override public void convertCode(DexMethodNode methodNode, MethodVisitor mv) { try { super.convertCode(methodNode, mv); } catch (Exception ex) { BaksmaliDumper d = new BaksmaliDumper(); try { BufferedWriter out = new BufferedWriter(new OutputStreamWriter(System.err, "UTF-8")); d.baksmaliMethod(methodNode, out); out.flush(); } catch (IOException e) { e.printStackTrace(); } throw new DexException(ex, "fail convert code %s", methodNode.method); } } };
private void dotest(Path f) throws Exception { Path smali0 = new File("target/" + f.getFileName() + "-smali0.zip").toPath(); try (FileSystem fs0 = BaseCmd.createZip(smali0)) { Baksmali.from(f).to(fs0.getPath("/")); } Path smali1 = new File("target/" + f.getFileName() + "-smali1.zip").toPath(); try (FileSystem fs0 = BaseCmd.openZip(smali0); FileSystem fs1 = BaseCmd.createZip(smali1)) { BaksmaliDumper baksmaliDumper = new BaksmaliDumper(); BaksmaliDexFileVisitor v = new BaksmaliDexFileVisitor(fs1.getPath("/"), baksmaliDumper); Smali.smali(fs0.getPath("/"), v); } } }
@Test public void test() throws IOException { DexFileNode dfn = new DexFileNode(); try (InputStream is = SmaliTest.class.getResourceAsStream("/a.smali")) { Smali.smaliFile("a.smali", is, dfn); } for (DexClassNode dcn : dfn.clzs) { BufferedWriter w = new BufferedWriter(new OutputStreamWriter(System.out)); new BaksmaliDumper(true, true).baksmaliClass(dcn, new BaksmaliDumpOut(w)); w.flush(); } }