我正在我的 Android 设备上进行实验,尝试使用应用程序代码,以便我可以同时学习它。 但我对如何编辑 smali 代码非常困惑。 对于只学习过 OOP 语言的人来说,这并不是那么简单。
这是我的 smali 代码:
const-string v0, "get_value_one"
invoke-virtual {p0, v0}, Lorg/json/JSONObject;->getInt(Ljava/lang/String;)I
move-result v0
iput v0, v2, Lcom/breakapp/dd/mymod/Processor;->l:I
这是它的等效 java 代码:
Processor MyProcessor = new Processor();
try {
MyProcessor.l = paramJSONObject.getInt("get_value_one");
return MyProcessor;
} catch (Exception e) { }
return MyProcessor;
现在我想让事情变得简单,只需在参数中添加一个常量 Java 中的“MyProcessor.l”IE:
MyProcessor.l = 10;
我尝试了一些不同的approcaches,例如:
iput v0, v2, Lcom/breakapp/dd/mymod/Processor;->l:10
但是我遇到了编译错误,所以这显然是错误的。 此外,我并没有真正理解我在做什么以及为什么要做我所做的事情。有人可以引导我完成这里的逻辑步骤吗?非常感谢。
最佳答案
我也是 Android Reversing 的新手,我花了一些时间搜索 Smali 代码的简单理解,发现了这个:
注意类结构是L;
Lcom/breakapp/dd/mymod/Processor;->l:I
原始java文件名
.source "example.java"
这些是类实例变量
.field private someString:Ljava/lang/String;
这会将字符串值分配给 v0
const-string v0, "get_value_one"
实际上并不直接使用决赛,因为对它们的引用被值本身原始备忘单所取代:
V - void、B - 字节、S - 短整型、C - 字符、I - 整型
J - 长整型(使用两个寄存器),F - 浮点型,D - double 型
.field public final someInt:I # the :I means integer
.field public final someBool:Z # the :Z means boolean
取自:Android Cracking !
关于android - 解释和理解 smali。有人可以帮我翻译吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26450308/