From 5e28c634e729556aca68c375b0176533d3575e1d Mon Sep 17 00:00:00 2001 From: "JesusFreke@JesusFreke.com" Date: Thu, 18 Jun 2009 02:31:38 +0000 Subject: [PATCH] Implemented field and method encoded values, and redid how string and type encoded values are handled git-svn-id: https://smali.googlecode.com/svn/trunk@162 55b6fa8a-2a1e-11de-a435-ffa8d773f76a --- ...or.java => EncodedIndexedItemAdaptor.java} | 15 +++--- .../EncodedValue/EncodedValueAdaptor.java | 17 +++++-- .../StringEncodedValueAdaptor.java | 48 ------------------- .../src/main/resources/templates/baksmali.stg | 9 +++- .../src/test/smali/baksmali_test_class.smali | 4 ++ 5 files changed, 31 insertions(+), 62 deletions(-) rename baksmali/src/main/java/org/jf/baksmali/Adaptors/EncodedValue/{TypeEncodedValueAdaptor.java => EncodedIndexedItemAdaptor.java} (81%) delete mode 100644 baksmali/src/main/java/org/jf/baksmali/Adaptors/EncodedValue/StringEncodedValueAdaptor.java diff --git a/baksmali/src/main/java/org/jf/baksmali/Adaptors/EncodedValue/TypeEncodedValueAdaptor.java b/baksmali/src/main/java/org/jf/baksmali/Adaptors/EncodedValue/EncodedIndexedItemAdaptor.java similarity index 81% rename from baksmali/src/main/java/org/jf/baksmali/Adaptors/EncodedValue/TypeEncodedValueAdaptor.java rename to baksmali/src/main/java/org/jf/baksmali/Adaptors/EncodedValue/EncodedIndexedItemAdaptor.java index 8406b70c..840b716e 100644 --- a/baksmali/src/main/java/org/jf/baksmali/Adaptors/EncodedValue/TypeEncodedValueAdaptor.java +++ b/baksmali/src/main/java/org/jf/baksmali/Adaptors/EncodedValue/EncodedIndexedItemAdaptor.java @@ -28,20 +28,21 @@ package org.jf.baksmali.Adaptors.EncodedValue; -import org.jf.dexlib.TypeIdItem; +import org.jf.dexlib.IndexedItem; +import org.jf.baksmali.Adaptors.Reference.Reference; -public class TypeEncodedValueAdaptor extends EncodedValueAdaptor { - private TypeIdItem typeIdItem; +public class EncodedIndexedItemAdaptor extends EncodedValueAdaptor { + private Reference reference; - public TypeEncodedValueAdaptor(TypeIdItem typeIdItem) { - this.typeIdItem = typeIdItem; + public EncodedIndexedItemAdaptor(Reference reference) { + this.reference = reference; } public String getFormat() { - return "SimpleEncodedValue"; + return "EncodedIndexedItemReference"; } public Object getValue() { - return typeIdItem.getTypeDescriptor(); + return reference; } } diff --git a/baksmali/src/main/java/org/jf/baksmali/Adaptors/EncodedValue/EncodedValueAdaptor.java b/baksmali/src/main/java/org/jf/baksmali/Adaptors/EncodedValue/EncodedValueAdaptor.java index f92f75ad..f76ff058 100644 --- a/baksmali/src/main/java/org/jf/baksmali/Adaptors/EncodedValue/EncodedValueAdaptor.java +++ b/baksmali/src/main/java/org/jf/baksmali/Adaptors/EncodedValue/EncodedValueAdaptor.java @@ -31,6 +31,9 @@ package org.jf.baksmali.Adaptors.EncodedValue; import org.jf.dexlib.EncodedValue.*; import org.jf.dexlib.StringIdItem; import org.jf.dexlib.TypeIdItem; +import org.jf.dexlib.MethodIdItem; +import org.jf.dexlib.FieldIdItem; +import org.jf.baksmali.Adaptors.Reference.*; public abstract class EncodedValueAdaptor { public static EncodedValueAdaptor make(EncodedValue encodedValue) { @@ -50,23 +53,27 @@ public abstract class EncodedValueAdaptor { case VALUE_ENUM: return null; case VALUE_FIELD: - return null; + EncodedIndexedItemReference fieldEncodedReference = (EncodedIndexedItemReference)encodedValue.getValue(); + return new EncodedIndexedItemAdaptor(new FieldReference((FieldIdItem)fieldEncodedReference.getValue())); case VALUE_FLOAT: return new SimpleEncodedValueAdaptor(((FloatEncodedValueSubField)encodedValue.getValue()).getValue()); case VALUE_INT: return new SimpleEncodedValueAdaptor(((IntEncodedValueSubField)encodedValue.getValue()).getValue()); - case VALUE_LONG: + case VALUE_LONG: return new SimpleEncodedValueAdaptor(((LongEncodedValueSubField)encodedValue.getValue()).getValue()); case VALUE_METHOD: - return null; + EncodedIndexedItemReference methodEncodedReference = (EncodedIndexedItemReference)encodedValue.getValue(); + return new EncodedIndexedItemAdaptor(new MethodReference((MethodIdItem)methodEncodedReference.getValue())); case VALUE_NULL: return null; case VALUE_SHORT: return new SimpleEncodedValueAdaptor(((ShortEncodedValueSubField)encodedValue.getValue()).getValue()); case VALUE_STRING: - return new StringEncodedValueAdaptor(((EncodedIndexedItemReference)encodedValue.getValue()).getValue()); + EncodedIndexedItemReference stringEncodedReference = (EncodedIndexedItemReference)encodedValue.getValue(); + return new EncodedIndexedItemAdaptor(new StringReference((StringIdItem)stringEncodedReference.getValue())); case VALUE_TYPE: - return new TypeEncodedValueAdaptor(((EncodedIndexedItemReference)encodedValue.getValue()).getValue()); + EncodedIndexedItemReference typeEncodedReference = (EncodedIndexedItemReference)encodedValue.getValue(); + return new EncodedIndexedItemAdaptor(new TypeReference((TypeIdItem)typeEncodedReference.getValue())); } return null; } diff --git a/baksmali/src/main/java/org/jf/baksmali/Adaptors/EncodedValue/StringEncodedValueAdaptor.java b/baksmali/src/main/java/org/jf/baksmali/Adaptors/EncodedValue/StringEncodedValueAdaptor.java deleted file mode 100644 index 11c8f6d6..00000000 --- a/baksmali/src/main/java/org/jf/baksmali/Adaptors/EncodedValue/StringEncodedValueAdaptor.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * [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.EncodedValue; - -import org.jf.dexlib.StringIdItem; -import org.jf.dexlib.util.Utf8Utils; - -public class StringEncodedValueAdaptor extends EncodedValueAdaptor { - private StringIdItem stringIdItem; - - public StringEncodedValueAdaptor(StringIdItem stringIdItem) { - this.stringIdItem = stringIdItem; - } - - public String getFormat() { - return "StringEncodedValue"; - } - - public Object getValue() { - return Utf8Utils.escapeString(stringIdItem.getStringValue()); - } -} diff --git a/baksmali/src/main/resources/templates/baksmali.stg b/baksmali/src/main/resources/templates/baksmali.stg index dd6adee9..c6ef476b 100644 --- a/baksmali/src/main/resources/templates/baksmali.stg +++ b/baksmali/src/main/resources/templates/baksmali.stg @@ -255,6 +255,11 @@ MethodReference(MethodReference) ::= -> >> +TypeReference(TypeReference) ::= +<< + +>> + EncodedValue(EncodedValue) ::= @@ -267,7 +272,7 @@ SimpleEncodedValue(EncodedValue) ::= >> -StringEncodedValue(EncodedValue) ::= +EncodedIndexedItemReference(EncodedValue) ::= << -"" + >> \ No newline at end of file diff --git a/baksmali/src/test/smali/baksmali_test_class.smali b/baksmali/src/test/smali/baksmali_test_class.smali index b8fe7d17..5ec24c3d 100644 --- a/baksmali/src/test/smali/baksmali_test_class.smali +++ b/baksmali/src/test/smali/baksmali_test_class.smali @@ -34,6 +34,10 @@ .field public static stringStaticField:Ljava/lang/String; = "test" .field public static stringEscapedStaticField:Ljava/lang/String; = "test\ntest" +.field public static fieldStaticField:Ljava/lang/reflect/Field; = Lbaksmali/test/class;->fieldStaticField:Ljava/lang/reflect/Field; + +.field public static methodStaticField:Ljava/lang/reflect/Method; = Lbaksmali/test/class;->teshMethod(ILjava/lang/String;)Ljava/lang/String; + .field public instanceField:Ljava/lang/String; .method public constructor ()V