diff --git a/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/ArrayDataMethodItem.java b/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/ArrayDataMethodItem.java index f919d256..9d0a896a 100644 --- a/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/ArrayDataMethodItem.java +++ b/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/ArrayDataMethodItem.java @@ -28,19 +28,17 @@ package org.jf.baksmali.Adaptors.Format; -import org.jf.dexlib.Code.Format.ArrayDataPseudoInstruction; -import org.jf.dexlib.Util.ByteArray; -import org.antlr.stringtemplate.StringTemplateGroup; import org.antlr.stringtemplate.StringTemplate; +import org.antlr.stringtemplate.StringTemplateGroup; +import org.jf.dexlib.Code.Format.ArrayDataPseudoInstruction; +import org.jf.dexlib.CodeItem; -import java.util.ArrayList; -import java.util.List; import java.util.Iterator; -import java.util.Arrays; public class ArrayDataMethodItem extends InstructionFormatMethodItem { - public ArrayDataMethodItem(int offset, StringTemplateGroup stg, ArrayDataPseudoInstruction instruction) { - super(offset, stg, instruction); + public ArrayDataMethodItem(CodeItem codeItem, int offset, StringTemplateGroup stg, + ArrayDataPseudoInstruction instruction) { + super(codeItem, offset, stg, instruction); } protected void setAttributes(StringTemplate template) { @@ -53,10 +51,10 @@ public class ArrayDataMethodItem extends InstructionFormatMethodItem { - public Instruction10tMethodItem(int offset, StringTemplateGroup stg, Instruction10t instruction) { - super(offset, stg, instruction); + public Instruction10tMethodItem(CodeItem codeItem, int offset, StringTemplateGroup stg, + Instruction10t instruction) { + super(codeItem, offset, stg, instruction); } protected void setAttributes(StringTemplate template) { diff --git a/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction10xMethodItem.java b/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction10xMethodItem.java index 35c75bcc..c302f371 100644 --- a/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction10xMethodItem.java +++ b/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction10xMethodItem.java @@ -28,13 +28,14 @@ package org.jf.baksmali.Adaptors.Format; -import org.jf.dexlib.Code.Format.Instruction10x; -import org.antlr.stringtemplate.StringTemplateGroup; import org.antlr.stringtemplate.StringTemplate; +import org.antlr.stringtemplate.StringTemplateGroup; +import org.jf.dexlib.Code.Format.Instruction10x; +import org.jf.dexlib.CodeItem; public class Instruction10xMethodItem extends InstructionFormatMethodItem { - public Instruction10xMethodItem(int offset, StringTemplateGroup stg, Instruction10x instruction) { - super(offset, stg, instruction); + public Instruction10xMethodItem(CodeItem codeItem, int offset, StringTemplateGroup stg, Instruction10x instruction) { + super(codeItem, offset, stg, instruction); } protected void setAttributes(StringTemplate template) { diff --git a/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction11nMethodItem.java b/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction11nMethodItem.java index 3e7a22cc..8ba5c494 100644 --- a/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction11nMethodItem.java +++ b/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction11nMethodItem.java @@ -28,17 +28,19 @@ package org.jf.baksmali.Adaptors.Format; -import org.jf.dexlib.Code.Format.Instruction11n; -import org.antlr.stringtemplate.StringTemplateGroup; import org.antlr.stringtemplate.StringTemplate; +import org.antlr.stringtemplate.StringTemplateGroup; +import org.jf.dexlib.Code.Format.Instruction11n; +import org.jf.dexlib.CodeItem; public class Instruction11nMethodItem extends InstructionFormatMethodItem { - public Instruction11nMethodItem(int offset, StringTemplateGroup stg, Instruction11n instruction) { - super(offset, stg, instruction); + public Instruction11nMethodItem(CodeItem codeItem, int offset, StringTemplateGroup stg, + Instruction11n instruction) { + super(codeItem, offset, stg, instruction); } protected void setAttributes(StringTemplate template) { - template.setAttribute("Register", instruction.getRegister()); + template.setAttribute("Register", formatRegister(instruction.getRegister())); template.setAttribute("Literal", instruction.getLiteral()); } } diff --git a/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction11xMethodItem.java b/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction11xMethodItem.java index d2a77bc0..d1b86667 100644 --- a/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction11xMethodItem.java +++ b/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction11xMethodItem.java @@ -28,17 +28,19 @@ package org.jf.baksmali.Adaptors.Format; -import org.jf.dexlib.Code.Format.Instruction11x; -import org.antlr.stringtemplate.StringTemplateGroup; import org.antlr.stringtemplate.StringTemplate; +import org.antlr.stringtemplate.StringTemplateGroup; +import org.jf.dexlib.Code.Format.Instruction11x; +import org.jf.dexlib.CodeItem; public class Instruction11xMethodItem extends InstructionFormatMethodItem { - public Instruction11xMethodItem(int offset, StringTemplateGroup stg, Instruction11x instruction) { - super(offset, stg, instruction); + public Instruction11xMethodItem(CodeItem codeItem, int offset, StringTemplateGroup stg, + Instruction11x instruction) { + super(codeItem, offset, stg, instruction); } protected void setAttributes(StringTemplate template) { - template.setAttribute("Register", instruction.getRegister()); + template.setAttribute("Register", formatRegister(instruction.getRegister())); } } diff --git a/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction12xMethodItem.java b/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction12xMethodItem.java index 3ff9945a..ad7fb73b 100644 --- a/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction12xMethodItem.java +++ b/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction12xMethodItem.java @@ -28,17 +28,19 @@ package org.jf.baksmali.Adaptors.Format; -import org.jf.dexlib.Code.Format.Instruction12x; -import org.antlr.stringtemplate.StringTemplateGroup; import org.antlr.stringtemplate.StringTemplate; +import org.antlr.stringtemplate.StringTemplateGroup; +import org.jf.dexlib.Code.Format.Instruction12x; +import org.jf.dexlib.CodeItem; public class Instruction12xMethodItem extends InstructionFormatMethodItem { - public Instruction12xMethodItem(int offset, StringTemplateGroup stg, Instruction12x instruction) { - super(offset, stg, instruction); + public Instruction12xMethodItem(CodeItem codeItem, int offset, StringTemplateGroup stg, + Instruction12x instruction) { + super(codeItem, offset, stg, instruction); } - + protected void setAttributes(StringTemplate template) { - template.setAttribute("RegisterA", instruction.getRegisterA()); - template.setAttribute("RegisterB", instruction.getRegisterB()); + template.setAttribute("RegisterA", formatRegister(instruction.getRegisterA())); + template.setAttribute("RegisterB", formatRegister(instruction.getRegisterB())); } } diff --git a/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction20tMethodItem.java b/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction20tMethodItem.java index bdb397b5..fe337ae6 100644 --- a/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction20tMethodItem.java +++ b/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction20tMethodItem.java @@ -28,15 +28,17 @@ package org.jf.baksmali.Adaptors.Format; -import org.jf.dexlib.Code.Format.Instruction20t; -import org.antlr.stringtemplate.StringTemplateGroup; import org.antlr.stringtemplate.StringTemplate; +import org.antlr.stringtemplate.StringTemplateGroup; +import org.jf.dexlib.Code.Format.Instruction20t; +import org.jf.dexlib.CodeItem; public class Instruction20tMethodItem extends InstructionFormatMethodItem { - public Instruction20tMethodItem(int offset, StringTemplateGroup stg, Instruction20t instruction) { - super(offset, stg, instruction); + public Instruction20tMethodItem(CodeItem codeItem, int offset, StringTemplateGroup stg, + Instruction20t instruction) { + super(codeItem, offset, stg, instruction); } - + protected void setAttributes(StringTemplate template) { template.setAttribute("Target", Integer.toHexString(getOffset() + instruction.getOffset())); } diff --git a/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction21cMethodItem.java b/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction21cMethodItem.java index 177283e5..99358d5f 100644 --- a/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction21cMethodItem.java +++ b/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction21cMethodItem.java @@ -28,19 +28,21 @@ package org.jf.baksmali.Adaptors.Format; -import org.jf.dexlib.Code.Format.Instruction21c; -import org.jf.baksmali.Adaptors.Reference.Reference; -import org.antlr.stringtemplate.StringTemplateGroup; import org.antlr.stringtemplate.StringTemplate; +import org.antlr.stringtemplate.StringTemplateGroup; +import org.jf.baksmali.Adaptors.Reference.Reference; +import org.jf.dexlib.Code.Format.Instruction21c; +import org.jf.dexlib.CodeItem; public class Instruction21cMethodItem extends InstructionFormatMethodItem { - public Instruction21cMethodItem(int offset, StringTemplateGroup stg, Instruction21c instruction) { - super(offset, stg, instruction); + public Instruction21cMethodItem(CodeItem codeItem, int offset, StringTemplateGroup stg, + Instruction21c instruction) { + super(codeItem, offset, stg, instruction); } - + protected void setAttributes(StringTemplate template) { template.setAttribute("Reference", Reference.makeReference(template.getGroup(), instruction.getReferencedItem())); - template.setAttribute("Register", instruction.getRegister()); + template.setAttribute("Register", formatRegister(instruction.getRegister())); } } diff --git a/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction21hMethodItem.java b/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction21hMethodItem.java index 5dd6d64c..4df621e7 100644 --- a/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction21hMethodItem.java +++ b/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction21hMethodItem.java @@ -28,17 +28,19 @@ package org.jf.baksmali.Adaptors.Format; -import org.jf.dexlib.Code.Format.Instruction21h; -import org.antlr.stringtemplate.StringTemplateGroup; import org.antlr.stringtemplate.StringTemplate; +import org.antlr.stringtemplate.StringTemplateGroup; +import org.jf.dexlib.Code.Format.Instruction21h; +import org.jf.dexlib.CodeItem; public class Instruction21hMethodItem extends InstructionFormatMethodItem { - public Instruction21hMethodItem(int offset, StringTemplateGroup stg, Instruction21h instruction) { - super(offset, stg, instruction); + public Instruction21hMethodItem(CodeItem codeItem, int offset, StringTemplateGroup stg, + Instruction21h instruction) { + super(codeItem, offset, stg, instruction); } protected void setAttributes(StringTemplate template) { - template.setAttribute("Register", instruction.getRegister()); + template.setAttribute("Register", formatRegister(instruction.getRegister())); template.setAttribute("Literal", instruction.getLiteral()); } } diff --git a/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction21sMethodItem.java b/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction21sMethodItem.java index 2a12a034..fdaa8cd0 100644 --- a/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction21sMethodItem.java +++ b/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction21sMethodItem.java @@ -28,17 +28,19 @@ package org.jf.baksmali.Adaptors.Format; -import org.jf.dexlib.Code.Format.Instruction21s; -import org.antlr.stringtemplate.StringTemplateGroup; import org.antlr.stringtemplate.StringTemplate; +import org.antlr.stringtemplate.StringTemplateGroup; +import org.jf.dexlib.Code.Format.Instruction21s; +import org.jf.dexlib.CodeItem; public class Instruction21sMethodItem extends InstructionFormatMethodItem { - public Instruction21sMethodItem(int offset, StringTemplateGroup stg, Instruction21s instruction) { - super(offset, stg, instruction); + public Instruction21sMethodItem(CodeItem codeItem, int offset, StringTemplateGroup stg, + Instruction21s instruction) { + super(codeItem, offset, stg, instruction); } protected void setAttributes(StringTemplate template) { - template.setAttribute("Register", instruction.getRegister()); + template.setAttribute("Register", formatRegister(instruction.getRegister())); template.setAttribute("Literal", instruction.getLiteral()); } } diff --git a/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction21tMethodItem.java b/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction21tMethodItem.java index d2ebe021..8185564a 100644 --- a/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction21tMethodItem.java +++ b/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction21tMethodItem.java @@ -28,17 +28,19 @@ package org.jf.baksmali.Adaptors.Format; -import org.jf.dexlib.Code.Format.Instruction21t; -import org.antlr.stringtemplate.StringTemplateGroup; import org.antlr.stringtemplate.StringTemplate; +import org.antlr.stringtemplate.StringTemplateGroup; +import org.jf.dexlib.Code.Format.Instruction21t; +import org.jf.dexlib.CodeItem; public class Instruction21tMethodItem extends InstructionFormatMethodItem { - public Instruction21tMethodItem(int offset, StringTemplateGroup stg, Instruction21t instruction) { - super(offset, stg,instruction); + public Instruction21tMethodItem(CodeItem codeItem, int offset, StringTemplateGroup stg, + Instruction21t instruction) { + super(codeItem, offset, stg, instruction); } protected void setAttributes(StringTemplate template) { - template.setAttribute("Register", instruction.getRegister()); + template.setAttribute("Register", formatRegister(instruction.getRegister())); template.setAttribute("Target", Integer.toHexString(getOffset() + instruction.getOffset())); } } diff --git a/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction22bMethodItem.java b/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction22bMethodItem.java index ceec9061..7115da32 100644 --- a/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction22bMethodItem.java +++ b/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction22bMethodItem.java @@ -28,18 +28,20 @@ package org.jf.baksmali.Adaptors.Format; -import org.jf.dexlib.Code.Format.Instruction22b; -import org.antlr.stringtemplate.StringTemplateGroup; import org.antlr.stringtemplate.StringTemplate; +import org.antlr.stringtemplate.StringTemplateGroup; +import org.jf.dexlib.Code.Format.Instruction22b; +import org.jf.dexlib.CodeItem; public class Instruction22bMethodItem extends InstructionFormatMethodItem { - public Instruction22bMethodItem(int offset, StringTemplateGroup stg, Instruction22b instruction) { - super(offset, stg, instruction); + public Instruction22bMethodItem(CodeItem codeItem, int offset, StringTemplateGroup stg, + Instruction22b instruction) { + super(codeItem, offset, stg, instruction); } protected void setAttributes(StringTemplate template) { - template.setAttribute("RegisterA", instruction.getRegisterA()); - template.setAttribute("RegisterB", instruction.getRegisterB()); + template.setAttribute("RegisterA", formatRegister(instruction.getRegisterA())); + template.setAttribute("RegisterB", formatRegister(instruction.getRegisterB())); template.setAttribute("Literal", instruction.getLiteral()); } } diff --git a/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction22cMethodItem.java b/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction22cMethodItem.java index 1df4ab81..7ff468f6 100644 --- a/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction22cMethodItem.java +++ b/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction22cMethodItem.java @@ -28,20 +28,22 @@ package org.jf.baksmali.Adaptors.Format; -import org.jf.dexlib.Code.Format.Instruction22c; -import org.jf.baksmali.Adaptors.Reference.Reference; -import org.antlr.stringtemplate.StringTemplateGroup; import org.antlr.stringtemplate.StringTemplate; +import org.antlr.stringtemplate.StringTemplateGroup; +import org.jf.baksmali.Adaptors.Reference.Reference; +import org.jf.dexlib.Code.Format.Instruction22c; +import org.jf.dexlib.CodeItem; public class Instruction22cMethodItem extends InstructionFormatMethodItem { - public Instruction22cMethodItem(int offset, StringTemplateGroup stg, Instruction22c instruction) { - super(offset, stg, instruction); + public Instruction22cMethodItem(CodeItem codeItem, int offset, StringTemplateGroup stg, + Instruction22c instruction) { + super(codeItem, offset, stg, instruction); } protected void setAttributes(StringTemplate template) { template.setAttribute("Reference", Reference.makeReference(template.getGroup(), instruction.getReferencedItem())); - template.setAttribute("RegisterA", instruction.getRegisterA()); - template.setAttribute("RegisterB", instruction.getRegisterB()); + template.setAttribute("RegisterA", formatRegister(instruction.getRegisterA())); + template.setAttribute("RegisterB", formatRegister(instruction.getRegisterB())); } } diff --git a/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction22sMethodItem.java b/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction22sMethodItem.java index 5ca10056..87f8d3ed 100644 --- a/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction22sMethodItem.java +++ b/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction22sMethodItem.java @@ -28,18 +28,20 @@ package org.jf.baksmali.Adaptors.Format; -import org.jf.dexlib.Code.Format.Instruction22s; -import org.antlr.stringtemplate.StringTemplateGroup; import org.antlr.stringtemplate.StringTemplate; +import org.antlr.stringtemplate.StringTemplateGroup; +import org.jf.dexlib.Code.Format.Instruction22s; +import org.jf.dexlib.CodeItem; public class Instruction22sMethodItem extends InstructionFormatMethodItem { - public Instruction22sMethodItem(int offset, StringTemplateGroup stg, Instruction22s instruction) { - super(offset, stg, instruction); + public Instruction22sMethodItem(CodeItem codeItem, int offset, StringTemplateGroup stg, + Instruction22s instruction) { + super(codeItem, offset, stg, instruction); } protected void setAttributes(StringTemplate template) { - template.setAttribute("RegisterA", instruction.getRegisterA()); - template.setAttribute("RegisterB", instruction.getRegisterB()); + template.setAttribute("RegisterA", formatRegister(instruction.getRegisterA())); + template.setAttribute("RegisterB", formatRegister(instruction.getRegisterB())); template.setAttribute("Literal", instruction.getLiteral()); } } diff --git a/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction22tMethodItem.java b/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction22tMethodItem.java index e8b764a7..4f0e958c 100644 --- a/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction22tMethodItem.java +++ b/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction22tMethodItem.java @@ -28,18 +28,20 @@ package org.jf.baksmali.Adaptors.Format; -import org.jf.dexlib.Code.Format.Instruction22t; -import org.antlr.stringtemplate.StringTemplateGroup; import org.antlr.stringtemplate.StringTemplate; +import org.antlr.stringtemplate.StringTemplateGroup; +import org.jf.dexlib.Code.Format.Instruction22t; +import org.jf.dexlib.CodeItem; public class Instruction22tMethodItem extends InstructionFormatMethodItem { - public Instruction22tMethodItem(int offset, StringTemplateGroup stg, Instruction22t instruction) { - super(offset, stg, instruction); + public Instruction22tMethodItem(CodeItem codeItem, int offset, StringTemplateGroup stg, + Instruction22t instruction) { + super(codeItem, offset, stg, instruction); } protected void setAttributes(StringTemplate template) { - template.setAttribute("RegisterA", instruction.getRegisterA()); - template.setAttribute("RegisterB", instruction.getRegisterB()); + template.setAttribute("RegisterA", formatRegister(instruction.getRegisterA())); + template.setAttribute("RegisterB", formatRegister(instruction.getRegisterB())); template.setAttribute("Target", Integer.toHexString(getOffset() + instruction.getOffset())); } } diff --git a/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction22xMethodItem.java b/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction22xMethodItem.java index cecd7e53..84508d6a 100644 --- a/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction22xMethodItem.java +++ b/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction22xMethodItem.java @@ -28,17 +28,19 @@ package org.jf.baksmali.Adaptors.Format; -import org.jf.dexlib.Code.Format.Instruction22x; -import org.antlr.stringtemplate.StringTemplateGroup; import org.antlr.stringtemplate.StringTemplate; +import org.antlr.stringtemplate.StringTemplateGroup; +import org.jf.dexlib.Code.Format.Instruction22x; +import org.jf.dexlib.CodeItem; public class Instruction22xMethodItem extends InstructionFormatMethodItem { - public Instruction22xMethodItem(int offset, StringTemplateGroup stg, Instruction22x instruction) { - super(offset, stg, instruction); + public Instruction22xMethodItem(CodeItem codeItem, int offset, StringTemplateGroup stg, + Instruction22x instruction) { + super(codeItem, offset, stg, instruction); } protected void setAttributes(StringTemplate template) { - template.setAttribute("RegisterA", instruction.getRegisterA()); - template.setAttribute("RegisterB", instruction.getRegisterB()); + template.setAttribute("RegisterA", formatRegister(instruction.getRegisterA())); + template.setAttribute("RegisterB", formatRegister(instruction.getRegisterB())); } } diff --git a/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction23xMethodItem.java b/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction23xMethodItem.java index 4fb73f80..d6453ba5 100644 --- a/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction23xMethodItem.java +++ b/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction23xMethodItem.java @@ -28,18 +28,20 @@ package org.jf.baksmali.Adaptors.Format; -import org.jf.dexlib.Code.Format.Instruction23x; -import org.antlr.stringtemplate.StringTemplateGroup; import org.antlr.stringtemplate.StringTemplate; +import org.antlr.stringtemplate.StringTemplateGroup; +import org.jf.dexlib.Code.Format.Instruction23x; +import org.jf.dexlib.CodeItem; public class Instruction23xMethodItem extends InstructionFormatMethodItem { - public Instruction23xMethodItem(int offset, StringTemplateGroup stg, Instruction23x instruction) { - super(offset, stg, instruction); + public Instruction23xMethodItem(CodeItem codeItem, int offset, StringTemplateGroup stg, + Instruction23x instruction) { + super(codeItem, offset, stg, instruction); } protected void setAttributes(StringTemplate template) { - template.setAttribute("RegisterA", instruction.getRegisterA()); - template.setAttribute("RegisterB", instruction.getRegisterB()); - template.setAttribute("RegisterC", instruction.getRegisterC()); + template.setAttribute("RegisterA", formatRegister(instruction.getRegisterA())); + template.setAttribute("RegisterB", formatRegister(instruction.getRegisterB())); + template.setAttribute("RegisterC", formatRegister(instruction.getRegisterC())); } } diff --git a/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction30tMethodItem.java b/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction30tMethodItem.java index 968197cc..dfc0d636 100644 --- a/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction30tMethodItem.java +++ b/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction30tMethodItem.java @@ -28,13 +28,15 @@ package org.jf.baksmali.Adaptors.Format; -import org.jf.dexlib.Code.Format.Instruction30t; -import org.antlr.stringtemplate.StringTemplateGroup; import org.antlr.stringtemplate.StringTemplate; +import org.antlr.stringtemplate.StringTemplateGroup; +import org.jf.dexlib.Code.Format.Instruction30t; +import org.jf.dexlib.CodeItem; public class Instruction30tMethodItem extends InstructionFormatMethodItem { - public Instruction30tMethodItem(int offset, StringTemplateGroup stg, Instruction30t instruction) { - super(offset, stg, instruction); + public Instruction30tMethodItem(CodeItem codeItem, int offset, StringTemplateGroup stg, + Instruction30t instruction) { + super(codeItem, offset, stg, instruction); } protected void setAttributes(StringTemplate template) { diff --git a/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction31cMethodItem.java b/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction31cMethodItem.java index 353b12f3..33bdbc49 100644 --- a/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction31cMethodItem.java +++ b/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction31cMethodItem.java @@ -28,19 +28,21 @@ package org.jf.baksmali.Adaptors.Format; -import org.jf.dexlib.Code.Format.Instruction31c; -import org.jf.baksmali.Adaptors.Reference.Reference; import org.antlr.stringtemplate.StringTemplate; import org.antlr.stringtemplate.StringTemplateGroup; +import org.jf.baksmali.Adaptors.Reference.Reference; +import org.jf.dexlib.Code.Format.Instruction31c; +import org.jf.dexlib.CodeItem; public class Instruction31cMethodItem extends InstructionFormatMethodItem { - public Instruction31cMethodItem(int offset, StringTemplateGroup stg, Instruction31c instruction) { - super(offset, stg, instruction); + public Instruction31cMethodItem(CodeItem codeItem, int offset, StringTemplateGroup stg, + Instruction31c instruction) { + super(codeItem, offset, stg, instruction); } protected void setAttributes(StringTemplate template) { template.setAttribute("Reference", Reference.makeReference(template.getGroup(), instruction.getReferencedItem())); - template.setAttribute("Register", instruction.getRegister()); + template.setAttribute("Register", formatRegister(instruction.getRegister())); } } diff --git a/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction31iMethodItem.java b/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction31iMethodItem.java index 054f00fd..e0d8cf57 100644 --- a/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction31iMethodItem.java +++ b/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction31iMethodItem.java @@ -28,17 +28,19 @@ package org.jf.baksmali.Adaptors.Format; -import org.jf.dexlib.Code.Format.Instruction31i; -import org.antlr.stringtemplate.StringTemplateGroup; import org.antlr.stringtemplate.StringTemplate; +import org.antlr.stringtemplate.StringTemplateGroup; +import org.jf.dexlib.Code.Format.Instruction31i; +import org.jf.dexlib.CodeItem; public class Instruction31iMethodItem extends InstructionFormatMethodItem { - public Instruction31iMethodItem(int offset, StringTemplateGroup stg, Instruction31i instruction) { - super(offset, stg, instruction); + public Instruction31iMethodItem(CodeItem codeItem, int offset, StringTemplateGroup stg, + Instruction31i instruction) { + super(codeItem, offset, stg, instruction); } protected void setAttributes(StringTemplate template) { - template.setAttribute("Register", instruction.getRegister()); + template.setAttribute("Register", formatRegister(instruction.getRegister())); template.setAttribute("Literal", instruction.getLiteral()); } } diff --git a/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction31tMethodItem.java b/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction31tMethodItem.java index c15e716d..928b656b 100644 --- a/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction31tMethodItem.java +++ b/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction31tMethodItem.java @@ -28,17 +28,19 @@ package org.jf.baksmali.Adaptors.Format; -import org.jf.dexlib.Code.Format.Instruction31t; -import org.antlr.stringtemplate.StringTemplateGroup; import org.antlr.stringtemplate.StringTemplate; +import org.antlr.stringtemplate.StringTemplateGroup; +import org.jf.dexlib.Code.Format.Instruction31t; +import org.jf.dexlib.CodeItem; public class Instruction31tMethodItem extends InstructionFormatMethodItem { - public Instruction31tMethodItem(int offset, StringTemplateGroup stg, Instruction31t instruction) { - super(offset, stg, instruction); + public Instruction31tMethodItem(CodeItem codeItem, int offset, StringTemplateGroup stg, + Instruction31t instruction) { + super(codeItem, offset, stg, instruction); } protected void setAttributes(StringTemplate template) { - template.setAttribute("Register", instruction.getRegister()); + template.setAttribute("Register", formatRegister(instruction.getRegister())); template.setAttribute("Target", Integer.toHexString(getOffset() + instruction.getOffset())); } } diff --git a/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction32xMethodItem.java b/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction32xMethodItem.java index 4b171ce0..9ffc95a6 100644 --- a/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction32xMethodItem.java +++ b/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction32xMethodItem.java @@ -28,17 +28,19 @@ package org.jf.baksmali.Adaptors.Format; -import org.jf.dexlib.Code.Format.Instruction32x; -import org.antlr.stringtemplate.StringTemplateGroup; import org.antlr.stringtemplate.StringTemplate; +import org.antlr.stringtemplate.StringTemplateGroup; +import org.jf.dexlib.Code.Format.Instruction32x; +import org.jf.dexlib.CodeItem; public class Instruction32xMethodItem extends InstructionFormatMethodItem { - public Instruction32xMethodItem(int offset, StringTemplateGroup stg, Instruction32x instruction) { - super(offset, stg, instruction); + public Instruction32xMethodItem(CodeItem codeItem, int offset, StringTemplateGroup stg, + Instruction32x instruction) { + super(codeItem, offset, stg, instruction); } protected void setAttributes(StringTemplate template) { - template.setAttribute("RegisterA", instruction.getRegisterA()); - template.setAttribute("RegisterB", instruction.getRegisterB()); + template.setAttribute("RegisterA", formatRegister(instruction.getRegisterA())); + template.setAttribute("RegisterB", formatRegister(instruction.getRegisterB())); } } diff --git a/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction35cMethodItem.java b/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction35cMethodItem.java index d1df8d58..f07c3ec0 100644 --- a/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction35cMethodItem.java +++ b/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction35cMethodItem.java @@ -28,16 +28,16 @@ package org.jf.baksmali.Adaptors.Format; -import org.jf.dexlib.Code.Format.Instruction35c; -import org.jf.baksmali.Adaptors.Reference.Reference; -import org.antlr.stringtemplate.StringTemplateGroup; import org.antlr.stringtemplate.StringTemplate; - -import java.util.Arrays; +import org.antlr.stringtemplate.StringTemplateGroup; +import org.jf.baksmali.Adaptors.Reference.Reference; +import org.jf.dexlib.Code.Format.Instruction35c; +import org.jf.dexlib.CodeItem; public class Instruction35cMethodItem extends InstructionFormatMethodItem { - public Instruction35cMethodItem(int offset, StringTemplateGroup stg, Instruction35c instruction) { - super(offset, stg, instruction); + public Instruction35cMethodItem(CodeItem codeItem, int offset, StringTemplateGroup stg, + Instruction35c instruction) { + super(codeItem, offset, stg, instruction); } protected void setAttributes(StringTemplate template) { @@ -49,29 +49,29 @@ public class Instruction35cMethodItem extends InstructionFormatMethodItem { - public Instruction3rcMethodItem(int offset, StringTemplateGroup stg, Instruction3rc instruction) { - super(offset, stg, instruction); + public Instruction3rcMethodItem(int offset, StringTemplateGroup stg, Instruction3rc instruction, CodeItem codeItem) { + super(codeItem, offset, stg, instruction); } protected void setAttributes(StringTemplate template) { template.setAttribute("Reference", Reference.makeReference(template.getGroup(), instruction.getReferencedItem())); - template.setAttribute("StartRegister", instruction.getStartRegister()); - template.setAttribute("LastRegister", instruction.getStartRegister() + instruction.getRegCount() - 1); + + String[] registers = RegisterFormatter.formatFormat3rcRegisters(codeItem, instruction.getStartRegister(), + instruction.getStartRegister() + instruction.getRegCount() - 1); + + template.setAttribute("StartRegister", registers[0]); + template.setAttribute("LastRegister", registers[1]); } } diff --git a/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction51lMethodItem.java b/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction51lMethodItem.java index 7153777b..82503383 100644 --- a/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction51lMethodItem.java +++ b/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/Instruction51lMethodItem.java @@ -28,17 +28,19 @@ package org.jf.baksmali.Adaptors.Format; -import org.jf.dexlib.Code.Format.Instruction51l; -import org.antlr.stringtemplate.StringTemplateGroup; import org.antlr.stringtemplate.StringTemplate; +import org.antlr.stringtemplate.StringTemplateGroup; +import org.jf.dexlib.Code.Format.Instruction51l; +import org.jf.dexlib.CodeItem; public class Instruction51lMethodItem extends InstructionFormatMethodItem { - public Instruction51lMethodItem(int offset, StringTemplateGroup stg, Instruction51l instruction) { - super(offset, stg, instruction); + public Instruction51lMethodItem(CodeItem codeItem, int offset, StringTemplateGroup stg, + Instruction51l instruction) { + super(codeItem, offset, stg, instruction); } protected void setAttributes(StringTemplate template) { - template.setAttribute("Register", instruction.getRegister()); + template.setAttribute("Register", formatRegister(instruction.getRegister())); template.setAttribute("Literal", instruction.getLiteral()); } } diff --git a/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/InstructionFormatMethodItem.java b/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/InstructionFormatMethodItem.java index 6e973ec6..3548877c 100644 --- a/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/InstructionFormatMethodItem.java +++ b/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/InstructionFormatMethodItem.java @@ -28,18 +28,22 @@ package org.jf.baksmali.Adaptors.Format; -import org.jf.baksmali.Adaptors.MethodItem; -import org.jf.baksmali.Adaptors.Reference.Reference; -import org.jf.dexlib.Code.Instruction; import org.antlr.stringtemplate.StringTemplate; import org.antlr.stringtemplate.StringTemplateGroup; +import org.jf.baksmali.Adaptors.MethodItem; +import org.jf.baksmali.Adaptors.RegisterFormatter; +import org.jf.dexlib.Code.Instruction; +import org.jf.dexlib.CodeItem; public abstract class InstructionFormatMethodItem extends MethodItem { + protected final CodeItem codeItem; private final StringTemplateGroup stg; protected final T instruction; - public InstructionFormatMethodItem(int offset, StringTemplateGroup stg, T instruction) { + + public InstructionFormatMethodItem(CodeItem codeItem, int offset, StringTemplateGroup stg, T instruction) { super(offset); + this.codeItem = codeItem; this.stg = stg; this.instruction = instruction; } @@ -57,6 +61,10 @@ public abstract class InstructionFormatMethodItem extends return instruction.getFormat().name(); } + protected String formatRegister(int register) { + return RegisterFormatter.formatRegister(codeItem, register); + } + @Override public String toString() { StringTemplate template = stg.getInstanceOf(instruction.getFormat().name()); diff --git a/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/PackedSwitchMethodItem.java b/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/PackedSwitchMethodItem.java index d49423ee..90eb8892 100644 --- a/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/PackedSwitchMethodItem.java +++ b/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/PackedSwitchMethodItem.java @@ -28,21 +28,21 @@ package org.jf.baksmali.Adaptors.Format; -import org.jf.dexlib.Code.Format.PackedSwitchDataPseudoInstruction; -import org.jf.dexlib.Code.Format.SparseSwitchDataPseudoInstruction; -import org.antlr.stringtemplate.StringTemplateGroup; import org.antlr.stringtemplate.StringTemplate; +import org.antlr.stringtemplate.StringTemplateGroup; +import org.jf.dexlib.Code.Format.PackedSwitchDataPseudoInstruction; +import org.jf.dexlib.CodeItem; +import java.util.ArrayList; import java.util.Iterator; import java.util.List; -import java.util.ArrayList; public class PackedSwitchMethodItem extends InstructionFormatMethodItem { private int baseAddress; - public PackedSwitchMethodItem(int offset, StringTemplateGroup stg, PackedSwitchDataPseudoInstruction instruction, - int baseAddress) { - super(offset, stg, instruction); + public PackedSwitchMethodItem(CodeItem codeItem, int offset, StringTemplateGroup stg, + PackedSwitchDataPseudoInstruction instruction, int baseAddress) { + super(codeItem, offset, stg, instruction); this.baseAddress = baseAddress; } diff --git a/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/SparseSwitchMethodItem.java b/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/SparseSwitchMethodItem.java index 28c55725..43ed6c3c 100644 --- a/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/SparseSwitchMethodItem.java +++ b/baksmali/src/main/java/org/jf/baksmali/Adaptors/Format/SparseSwitchMethodItem.java @@ -28,20 +28,21 @@ package org.jf.baksmali.Adaptors.Format; -import org.jf.dexlib.Code.Format.SparseSwitchDataPseudoInstruction; -import org.antlr.stringtemplate.StringTemplateGroup; import org.antlr.stringtemplate.StringTemplate; +import org.antlr.stringtemplate.StringTemplateGroup; +import org.jf.dexlib.Code.Format.SparseSwitchDataPseudoInstruction; +import org.jf.dexlib.CodeItem; +import java.util.ArrayList; import java.util.Iterator; import java.util.List; -import java.util.ArrayList; public class SparseSwitchMethodItem extends InstructionFormatMethodItem { private int baseAddress; - public SparseSwitchMethodItem(int offset, StringTemplateGroup stg, SparseSwitchDataPseudoInstruction instruction, - int baseAddress) { - super(offset, stg, instruction); + public SparseSwitchMethodItem(CodeItem codeItem, int offset, StringTemplateGroup stg, + SparseSwitchDataPseudoInstruction instruction, int baseAddress) { + super(codeItem, offset, stg, instruction); this.baseAddress = baseAddress; } diff --git a/baksmali/src/main/java/org/jf/baksmali/Adaptors/LocalDebugMethodItem.java b/baksmali/src/main/java/org/jf/baksmali/Adaptors/LocalDebugMethodItem.java index 6483b064..cf81fcff 100644 --- a/baksmali/src/main/java/org/jf/baksmali/Adaptors/LocalDebugMethodItem.java +++ b/baksmali/src/main/java/org/jf/baksmali/Adaptors/LocalDebugMethodItem.java @@ -30,19 +30,21 @@ package org.jf.baksmali.Adaptors; import org.jf.dexlib.TypeIdItem; import org.jf.dexlib.StringIdItem; +import org.jf.dexlib.CodeItem; import org.antlr.stringtemplate.StringTemplateGroup; import org.antlr.stringtemplate.StringTemplate; public class LocalDebugMethodItem extends DebugMethodItem { - private final int register; + private final String register; private final String name; private final String type; private final String signature; - public LocalDebugMethodItem(int offset, StringTemplateGroup stg, String templateName, int sortOrder, int register, - StringIdItem name, TypeIdItem type, StringIdItem signature) { + public LocalDebugMethodItem(CodeItem codeItem, int offset, StringTemplateGroup stg, String templateName, + int sortOrder, int register, StringIdItem name, TypeIdItem type, + StringIdItem signature) { super(offset, stg, templateName, sortOrder); - this.register = register; + this.register = RegisterFormatter.formatRegister(codeItem, register); this.name = name==null?null:name.getStringValue(); this.type = type==null?null:type.getTypeDescriptor(); this.signature = signature==null?null:signature.getStringValue(); @@ -50,7 +52,7 @@ public class LocalDebugMethodItem extends DebugMethodItem { @Override protected void setAttributes(StringTemplate template) { - template.setAttribute("Register", Integer.toString(register)); + template.setAttribute("Register", register); template.setAttribute("Name", name); template.setAttribute("Type", type); template.setAttribute("Signature", signature); diff --git a/baksmali/src/main/java/org/jf/baksmali/Adaptors/MethodDefinition.java b/baksmali/src/main/java/org/jf/baksmali/Adaptors/MethodDefinition.java index 0fd2b39f..513e2a28 100644 --- a/baksmali/src/main/java/org/jf/baksmali/Adaptors/MethodDefinition.java +++ b/baksmali/src/main/java/org/jf/baksmali/Adaptors/MethodDefinition.java @@ -227,69 +227,69 @@ public class MethodDefinition { private void addMethodItemsForInstruction(int offset, Instruction instruction) { switch (instruction.getFormat()) { case Format10t: - instructions.add(new Instruction10tMethodItem(offset, stg,(Instruction10t)instruction)); + instructions.add(new Instruction10tMethodItem(codeItem, offset, stg,(Instruction10t)instruction)); labels.add(new LabelMethodItem(offset + ((Instruction10t)instruction).getOffset(), stg, "goto_")); return; case Format10x: - instructions.add(new Instruction10xMethodItem(offset, stg, (Instruction10x)instruction)); + instructions.add(new Instruction10xMethodItem(codeItem, offset, stg, (Instruction10x)instruction)); return; case Format11n: - instructions.add(new Instruction11nMethodItem(offset, stg, (Instruction11n)instruction)); + instructions.add(new Instruction11nMethodItem(codeItem, offset, stg, (Instruction11n)instruction)); return; case Format11x: - instructions.add(new Instruction11xMethodItem(offset, stg, (Instruction11x)instruction)); + instructions.add(new Instruction11xMethodItem(codeItem, offset, stg, (Instruction11x)instruction)); return; case Format12x: - instructions.add(new Instruction12xMethodItem(offset, stg, (Instruction12x)instruction)); + instructions.add(new Instruction12xMethodItem(codeItem, offset, stg, (Instruction12x)instruction)); return; case Format20t: - instructions.add(new Instruction20tMethodItem(offset, stg, (Instruction20t)instruction)); + instructions.add(new Instruction20tMethodItem(codeItem, offset, stg, (Instruction20t)instruction)); labels.add(new LabelMethodItem(offset + ((Instruction20t)instruction).getOffset(), stg, "goto_")); return; case Format21c: - instructions.add(new Instruction21cMethodItem(offset, stg, (Instruction21c)instruction)); + instructions.add(new Instruction21cMethodItem(codeItem, offset, stg, (Instruction21c)instruction)); return; case Format21h: - instructions.add(new Instruction21hMethodItem(offset, stg, (Instruction21h)instruction)); + instructions.add(new Instruction21hMethodItem(codeItem, offset, stg, (Instruction21h)instruction)); return; case Format21s: - instructions.add(new Instruction21sMethodItem(offset, stg, (Instruction21s)instruction)); + instructions.add(new Instruction21sMethodItem(codeItem, offset, stg, (Instruction21s)instruction)); return; case Format21t: - instructions.add(new Instruction21tMethodItem(offset, stg, (Instruction21t)instruction)); + instructions.add(new Instruction21tMethodItem(codeItem, offset, stg, (Instruction21t)instruction)); labels.add(new LabelMethodItem(offset + ((Instruction21t)instruction).getOffset(), stg, "cond_")); return; case Format22b: - instructions.add(new Instruction22bMethodItem(offset, stg, (Instruction22b)instruction)); + instructions.add(new Instruction22bMethodItem(codeItem, offset, stg, (Instruction22b)instruction)); return; case Format22c: - instructions.add(new Instruction22cMethodItem(offset, stg, (Instruction22c)instruction)); + instructions.add(new Instruction22cMethodItem(codeItem, offset, stg, (Instruction22c)instruction)); return; case Format22s: - instructions.add(new Instruction22sMethodItem(offset, stg, (Instruction22s)instruction)); + instructions.add(new Instruction22sMethodItem(codeItem, offset, stg, (Instruction22s)instruction)); return; case Format22t: - instructions.add(new Instruction22tMethodItem(offset, stg, (Instruction22t)instruction)); + instructions.add(new Instruction22tMethodItem(codeItem, offset, stg, (Instruction22t)instruction)); labels.add(new LabelMethodItem(offset + ((Instruction22t)instruction).getOffset(), stg, "cond_")); return; case Format22x: - instructions.add(new Instruction22xMethodItem(offset, stg, (Instruction22x)instruction)); + instructions.add(new Instruction22xMethodItem(codeItem, offset, stg, (Instruction22x)instruction)); return; case Format23x: - instructions.add(new Instruction23xMethodItem(offset, stg, (Instruction23x)instruction)); + instructions.add(new Instruction23xMethodItem(codeItem, offset, stg, (Instruction23x)instruction)); return; case Format30t: - instructions.add(new Instruction30tMethodItem(offset, stg, (Instruction30t)instruction)); + instructions.add(new Instruction30tMethodItem(codeItem, offset, stg, (Instruction30t)instruction)); labels.add(new LabelMethodItem(offset + ((Instruction30t)instruction).getOffset(), stg, "goto_")); return; case Format31c: - instructions.add(new Instruction31cMethodItem(offset, stg, (Instruction31c)instruction)); + instructions.add(new Instruction31cMethodItem(codeItem, offset, stg, (Instruction31c)instruction)); return; case Format31i: - instructions.add(new Instruction31iMethodItem(offset, stg, (Instruction31i)instruction)); + instructions.add(new Instruction31iMethodItem(codeItem, offset, stg, (Instruction31i)instruction)); return; case Format31t: - instructions.add(new Instruction31tMethodItem(offset, stg, (Instruction31t)instruction)); + instructions.add(new Instruction31tMethodItem(codeItem, offset, stg, (Instruction31t)instruction)); if (instruction.opcode == Opcode.FILL_ARRAY_DATA) { labels.add(new LabelMethodItem(offset + ((Instruction31t)instruction).getOffset(), stg, "array_")); @@ -302,19 +302,19 @@ public class MethodDefinition { } return; case Format32x: - instructions.add(new Instruction32xMethodItem(offset, stg, (Instruction32x)instruction)); + instructions.add(new Instruction32xMethodItem(codeItem, offset, stg, (Instruction32x)instruction)); return; case Format35c: - instructions.add(new Instruction35cMethodItem(offset, stg, (Instruction35c)instruction)); + instructions.add(new Instruction35cMethodItem(codeItem, offset, stg, (Instruction35c)instruction)); return; case Format3rc: - instructions.add(new Instruction3rcMethodItem(offset, stg, (Instruction3rc)instruction)); + instructions.add(new Instruction3rcMethodItem(offset, stg, (Instruction3rc)instruction, codeItem)); return; case Format51l: - instructions.add(new Instruction51lMethodItem(offset, stg, (Instruction51l)instruction)); + instructions.add(new Instruction51lMethodItem(codeItem, offset, stg, (Instruction51l)instruction)); return; case ArrayData: - instructions.add(new ArrayDataMethodItem(offset, stg, (ArrayDataPseudoInstruction)instruction)); + instructions.add(new ArrayDataMethodItem(codeItem, offset, stg, (ArrayDataPseudoInstruction)instruction)); return; case PackedSwitchData: { @@ -324,7 +324,7 @@ public class MethodDefinition { PackedSwitchDataPseudoInstruction packedSwitchInstruction = (PackedSwitchDataPseudoInstruction)instruction; - instructions.add(new PackedSwitchMethodItem(offset, stg, + instructions.add(new PackedSwitchMethodItem(codeItem, offset, stg, packedSwitchInstruction, baseAddress)); Iterator iterator = @@ -344,7 +344,7 @@ public class MethodDefinition { SparseSwitchDataPseudoInstruction sparseSwitchInstruction = (SparseSwitchDataPseudoInstruction)instruction; - instructions.add(new SparseSwitchMethodItem(offset, stg, + instructions.add(new SparseSwitchMethodItem(codeItem, offset, stg, sparseSwitchInstruction, baseAddress)); Iterator iterator = @@ -442,30 +442,30 @@ public class MethodDefinition { @Override public void ProcessStartLocal(int codeAddress, int length, int registerNum, StringIdItem name, TypeIdItem type) { - debugItems.add(new LocalDebugMethodItem(codeAddress, stg, "StartLocal", -1, registerNum, - name, type, null)); + debugItems.add(new LocalDebugMethodItem(codeItem, codeAddress, stg, "StartLocal", -1, + registerNum, name, type, null)); } @Override public void ProcessStartLocalExtended(int codeAddress, int length, int registerNum, StringIdItem name, TypeIdItem type, StringIdItem signature) { - debugItems.add(new LocalDebugMethodItem(codeAddress, stg, "StartLocal", -1, registerNum, - name, type, signature)); + debugItems.add(new LocalDebugMethodItem(codeItem, codeAddress, stg, "StartLocal", -1, + registerNum, name, type, signature)); } @Override public void ProcessEndLocal(int codeAddress, int length, int registerNum, StringIdItem name, TypeIdItem type, StringIdItem signature) { - debugItems.add(new LocalDebugMethodItem(codeAddress, stg, "EndLocal", -1, registerNum, name, - type, signature)); + debugItems.add(new LocalDebugMethodItem(codeItem, codeAddress, stg, "EndLocal", -1, + registerNum, name, type, signature)); } @Override public void ProcessRestartLocal(int codeAddress, int length, int registerNum, StringIdItem name, TypeIdItem type, StringIdItem signature) { - debugItems.add(new LocalDebugMethodItem(codeAddress, stg, "RestartLocal", -1, registerNum, - name, type, signature)); + debugItems.add(new LocalDebugMethodItem(codeItem, codeAddress, stg, "RestartLocal", -1, + registerNum, name, type, signature)); } @Override diff --git a/baksmali/src/main/java/org/jf/baksmali/Adaptors/RegisterFormatter.java b/baksmali/src/main/java/org/jf/baksmali/Adaptors/RegisterFormatter.java new file mode 100644 index 00000000..25eb3649 --- /dev/null +++ b/baksmali/src/main/java/org/jf/baksmali/Adaptors/RegisterFormatter.java @@ -0,0 +1,85 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2009 Ben Gruver + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package org.jf.baksmali.Adaptors; + +import org.jf.dexlib.CodeItem; +import org.jf.baksmali.baksmali; + +/** + * This class contains the logic used for formatting registers + */ +public class RegisterFormatter { + + /** + * This method is used (only) by format 3rc (the format that uses a range of regsiters like {v1 .. v10}) to format + * it's registers. If both registers are parameter registers, they will be formatted as such, otherwise they will + * both be formatted as normal registers + * @param codeItem + * @param startRegister + * @param lastRegister + * @return an array of 2 strings containing the formatted registers + */ + public static String[] formatFormat3rcRegisters(CodeItem codeItem, int startRegister, int lastRegister) { + if (!baksmali.noParameterRegisters) { + int parameterRegisterCount = codeItem.getParent().method.getPrototype().getParameterRegisterCount() + + (codeItem.getParent().isDirect()?0:1); + int registerCount = codeItem.getRegisterCount(); + + assert startRegister <= lastRegister; + + if (startRegister >= registerCount - parameterRegisterCount) { + return new String[] {"p" + (startRegister - (registerCount - parameterRegisterCount)), + "p" + (lastRegister - (registerCount - parameterRegisterCount))}; + } + } + return new String[] {"v" + startRegister, + "v" + lastRegister}; + } + + /** + * Formats a register with the appropriate format - with either the normal v format or the p parameter format. + * + * It uses the register and parameter information from the give CodeItem to determine if the given + * register is a normal or parameter register. + * @param codeItem + * @param register + * @return The formatted register + */ + public static String formatRegister(CodeItem codeItem, int register) { + if (!baksmali.noParameterRegisters) { + int parameterRegisterCount = codeItem.getParent().method.getPrototype().getParameterRegisterCount() + + (codeItem.getParent().isDirect()?0:1); + int registerCount = codeItem.getRegisterCount(); + if (register >= registerCount - parameterRegisterCount) { + return "p" + (register - (registerCount - parameterRegisterCount)); + } + } + return "v" + register; + } +} diff --git a/baksmali/src/main/java/org/jf/baksmali/baksmali.java b/baksmali/src/main/java/org/jf/baksmali/baksmali.java index 6f66ee13..5e9f0c58 100644 --- a/baksmali/src/main/java/org/jf/baksmali/baksmali.java +++ b/baksmali/src/main/java/org/jf/baksmali/baksmali.java @@ -39,8 +39,12 @@ import org.jf.dexlib.StringIdItem; import java.io.*; public class baksmali { - public static void disassembleDexFile(DexFile dexFile, String outputDirectory) + public static boolean noParameterRegisters = false; + + public static void disassembleDexFile(DexFile dexFile, String outputDirectory, boolean noParameterRegisters) { + baksmali.noParameterRegisters = noParameterRegisters; + File outputDirectoryFile = new File(outputDirectory); if (!outputDirectoryFile.exists()) { if (!outputDirectoryFile.mkdirs()) { diff --git a/baksmali/src/main/java/org/jf/baksmali/main.java b/baksmali/src/main/java/org/jf/baksmali/main.java index a7e0863b..979d4075 100644 --- a/baksmali/src/main/java/org/jf/baksmali/main.java +++ b/baksmali/src/main/java/org/jf/baksmali/main.java @@ -74,6 +74,7 @@ public class main { boolean sort = false; boolean fixRegisters = false; boolean readOnly = false; + boolean noParameterRegisters = false; String outputDirectory = "out"; String dumpFileName = null; @@ -131,6 +132,10 @@ public class main { fixRegisters = true; } + if (commandLine.hasOption("p")) { + noParameterRegisters = true; + } + try { File dexFileFile = new File(inputDexFileName); if (!dexFileFile.exists()) { @@ -146,7 +151,7 @@ public class main { } if (disassemble) { - baksmali.disassembleDexFile(dexFile, outputDirectory); + baksmali.disassembleDexFile(dexFile, outputDirectory, noParameterRegisters); } if (doDump || write) { @@ -230,9 +235,15 @@ public class main { .create("s"); Option fixSignedRegisterOption = OptionBuilder.withLongOpt("fix-signed-registers") - .withDescription("when dumping or rewriting, fix any registers in the debug info that are encoded as a signed value") + .withDescription("when dumping or rewriting, fix any registers in the debug info that are encoded as" + + " a signed value") .create("f"); + Option noParameterRegistersOption = OptionBuilder.withLongOpt("no-parameter-registers") + .withDescription("use the v syntax instead of the p syntax for registers mapped to method" + + " parameters") + .create("p"); + OptionGroup dumpCommand = new OptionGroup(); dumpCommand.addOption(dumpOption); dumpCommand.addOption(dumpOnlyOption); @@ -245,5 +256,6 @@ public class main { options.addOption(outputDirOption); options.addOption(sortOption); options.addOption(fixSignedRegisterOption); + options.addOption(noParameterRegistersOption); } } \ No newline at end of file diff --git a/baksmali/src/main/resources/templates/templates/baksmali.stg b/baksmali/src/main/resources/templates/templates/baksmali.stg index 937f952c..7af2bed7 100644 --- a/baksmali/src/main/resources/templates/templates/baksmali.stg +++ b/baksmali/src/main/resources/templates/templates/baksmali.stg @@ -128,13 +128,6 @@ Format31tLabelMap ::= [ ] -Register(num) ::= -<< -v ->> - - - Format10t(Opcode, Target) ::= << goto_: @@ -147,17 +140,17 @@ Format10x(Opcode) ::= Format11n(Opcode, Register, Literal) ::= << - , + , >> Format11x(Opcode, Register) ::= << - + >> Format12x(Opcode, RegisterA, RegisterB) ::= << - , + , >> Format20t(Opcode, Target) ::= @@ -167,52 +160,52 @@ Format20t(Opcode, Target) ::= Format21c(Opcode, Register, Reference) ::= << - , + , >> Format21h(Opcode, Register, Literal) ::= << - , + , >> Format21s(Opcode, Register, Literal) ::= << - , + , >> Format21t(Opcode, Register, Target) ::= << - , cond_: + , cond_: >> Format22b(Opcode, RegisterA, RegisterB, Literal) ::= << - , , + , , >> Format22c(Opcode, RegisterA, RegisterB, Reference) ::= << - , , + , , >> Format22s(Opcode, RegisterA, RegisterB, Literal) ::= << - , , + , , >> Format22t(Opcode, RegisterA, RegisterB, Target) ::= << - , , cond_: + , , cond_: >> Format22x(Opcode, RegisterA, RegisterB) ::= << - , + , >> Format23x(Opcode, RegisterA, RegisterB, RegisterC) ::= << - , , + , , >> Format30t(Opcode, Target) ::= @@ -222,37 +215,37 @@ Format30t(Opcode, Target) ::= Format31c(Opcode, Register, Reference) ::= << - , + , >> Format31i(Opcode, Register, Literal) ::= << - , + , >> Format31t(Opcode, Register, Target) ::= << - , : + , : >> Format32x(Opcode, RegisterA, RegisterB) ::= << - , + , >> Format35c(Opcode, Registers, Reference) ::= << - {}, + {}, >> Format3rc(Opcode, StartRegister, LastRegister, Reference) ::= << - { .. }, + { .. }, >> Format51l(Opcode, Register, Literal) ::= << - , + , >> ArrayData(Opcode, ElementWidth, Values) ::= @@ -304,17 +297,17 @@ StartEpilogue(Epilogue) ::= StartLocal(Register, Name, Type, Signature) ::= << -.local , :,"" +.local , :,"" >> EndLocal(Register, Name, Type, Signature) ::= << -.end local #:,, "" +.end local #:,, "" >> RestartLocal(Register, Name, Type, Signature) ::= << -.restart local #:,, "" +.restart local #:,, "" >> SetFile(FileName) ::=