From c242a62bcc6c482710f45c9c639fc3b36e5a3f82 Mon Sep 17 00:00:00 2001 From: YASME-Tim Date: Sun, 21 Dec 2014 23:26:02 +0100 Subject: [PATCH] Write xml to a given output file instead of stdout. --- jadx-cli/src/main/java/jadx/cli/JadxCLI.java | 2 +- .../jadx/core/xmlgen/BinaryXMLParser.java | 60 +++++++++++-------- 2 files changed, 35 insertions(+), 27 deletions(-) diff --git a/jadx-cli/src/main/java/jadx/cli/JadxCLI.java b/jadx-cli/src/main/java/jadx/cli/JadxCLI.java index 5eaa24ca2..7aeddc841 100644 --- a/jadx-cli/src/main/java/jadx/cli/JadxCLI.java +++ b/jadx-cli/src/main/java/jadx/cli/JadxCLI.java @@ -14,7 +14,7 @@ public class JadxCLI { private static final Logger LOG = LoggerFactory.getLogger(JadxCLI.class); public static void main(String[] args) throws JadxException { - BinaryXMLParser bxp = new BinaryXMLParser(args[0]); + BinaryXMLParser bxp = new BinaryXMLParser(args[0],args[1]); bxp.parse(); System.exit(4); try { diff --git a/jadx-core/src/main/java/jadx/core/xmlgen/BinaryXMLParser.java b/jadx-core/src/main/java/jadx/core/xmlgen/BinaryXMLParser.java index 2437117a8..f3da438c9 100644 --- a/jadx-core/src/main/java/jadx/core/xmlgen/BinaryXMLParser.java +++ b/jadx-core/src/main/java/jadx/core/xmlgen/BinaryXMLParser.java @@ -9,6 +9,7 @@ import java.io.FileNotFoundException; import java.io.InputStream; import java.io.IOException; import java.io.UnsupportedEncodingException; +import java.io.PrintWriter; public class BinaryXMLParser { private byte[] bytes; @@ -16,8 +17,14 @@ public class BinaryXMLParser { private int count; private String nsPrefix="ERROR"; private int numtabs=-1; - public BinaryXMLParser(String xmlfilepath) { - System.out.println(xmlfilepath); + PrintWriter writer; + public BinaryXMLParser(String xmlfilepath, String xmloutfilepath) { + //System.out.println(xmlfilepath); + try { + writer = new PrintWriter(xmloutfilepath,"UTF-8"); + } catch(FileNotFoundException fnfe) { die("FNFE"); } + catch(UnsupportedEncodingException uee) { die("UEE"); } + if(null==writer) die("null==writer"); File manifest = new File(xmlfilepath); if(null==manifest) die("null==manifest"); bytes = new byte[(int) manifest.length()]; @@ -55,6 +62,7 @@ public class BinaryXMLParser { else die("Type: " + Integer.toHexString(type) + " not yet implemented"); //System.out.println("COUNT: "+Integer.toHexString(count)); } + writer.close(); //die("Done"); } @@ -88,7 +96,7 @@ public class BinaryXMLParser { System.arraycopy(bytes, count, str, 0, strlen*2); count+=strlen*2; strings[i] = new String(str, Charset.forName("UTF-16LE")); - System.out.println("index i["+i+"] string: " + strings[i]); + //System.out.println("index i["+i+"] string: " + strings[i]); count+=2; } } @@ -96,12 +104,12 @@ public class BinaryXMLParser { private void parseResourceMap() { if(cInt16(bytes, count) != 0x8) die("Header size of resmap is not 8!"); int rhsize = cInt32(bytes, count); - System.out.println("RHeader Size: " + rhsize); + //System.out.println("RHeader Size: " + rhsize); int[] ids = new int[(rhsize-8)/4]; for(int i=0; i0) System.out.print(" "); + if(attributeCount>0) writer.print(" "); for(int i=0; i"); + writer.println(">"); } private void parseElementEnd() { @@ -209,10 +217,10 @@ public class BinaryXMLParser { //System.out.println("Comment: 0x" + Integer.toHexString(comment)); int elementNS = cInt32(bytes, count); int elementName = cInt32(bytes, count); - for(int i=0; i"); + for(int i=0; i"); numtabs-=1; }