2013-12-09 2 views
0

Я пытаюсь изменить файл apk с помощью smali, так что каждый раз, когда он обращается к другому члену списка, переменная увеличивается.Объявление глобальной переменной и увеличение ее значения в smali

Я ищу, чтобы сделать две вещи, во-первых, чтобы объявить public static int имени val1, а во-вторых реализовать этот код:

String str = (String)this.ListX.get(val1); 
val1++; 

Однако у меня есть очень ограниченные знания о smali коде, и я хочу некоторое представление по этому вопросу ,

+0

Там нет такого понятия, как по-настоящему глобальной переменной, просто ' public static'. – fadden

ответ

0

Я использую apktool преобразовать DEX код smali:

Java код:

private HashMap ListX; 
public void TestCodeStatic() 
{ 
    String str = (String)this.ListX.get(val1); 
    val1++; 
} 

Smali Код:

.field public static val1:I 
# instance fields 
.field private ListX:Ljava/util/HashMap; 


# virtual methods 
.method public TestCodeStatic()V 
    .locals 3 

    .prologue 
    .line 54 
    iget-object v1, p0, Lcom/example/app/MainActivity;->ListX:Ljava/util/HashMap; 

    .line 57 
    sget v2, Lcom/example/app/MainActivity;->val1:I 

    .line 60 
    invoke-static {v2}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer; 

    .line 63 
    move-result-object v2 

    .line 66 
    invoke-virtual {v1, v2}, Ljava/util/HashMap;->get(Ljava/lang/Object;)Ljava/lang/Object; 

    .line 69 
    move-result-object v0 

    .line 72 
    check-cast v0, Ljava/lang/String; 

    .local v0, str:Ljava/lang/String; 
    .line 76 
    sget v1, Lcom/example/app/MainActivity;->val1:I 

    .line 79 
    add-int/lit8 v1, v1, 0x1 

    .line 82 
    sput v1, Lcom/example/app/MainActivity;->val1:I 

    .line 85 
    return-void 
.end method 
Смежные вопросы