声明一个全局变量并在smali中增加其值

时间:2013-12-09 15:26:48

标签: java android dalvik smali

我正在尝试使用smali更改apk文件,这样每次访问列表的另一个成员时,变量都会递增。

我希望做两件事,首先声明一个名为public static int的{​​{1}},然后再实现此代码:

val1

但是我对smali代码的了解非常有限,我想对此有所了解。

1 个答案:

答案 0 :(得分: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