我最近一直在深入研究一些小编码文件和我不理解的术语,并且没有任何解释(甚至在dalvik操作码网站中也没有解释)。让我们开始讨论问题
1. What is ->?
2. What is (somerandomletter):I, F, J, S, C, B etc. (any element encoding letter)?
example of both in one: Lcom/google/android/gms/games/achievement/AchievementEntity;->j:I
3. What is this god damned v1, v2, v3, or v4 I see everywhere?
ex. const-string/jumbo v1, "Type"
4. What is invoke-static and invoke-interface?
ex. invoke-interface {p0}, Lcom/google/android/gms/games/achievement/Achievement;->n()J
ex. invoke-static {v2}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
5. What are interfaces and public or private fields?
答案 0 :(得分:2)
->
是用于表示成员(方法或字段)的语法。 Lcom/google/android/gms/games/achievement/AchievementEntity;->j:I
是对字段的引用。 Lcom/google/android/gms/games/achievement/AchievementEntity;
是包含字段的类,->
是表示成员的语法,j
是字段的名称,:
只是一个分隔符,I
1}}是字段的类型(int)。
这些是寄存器。您可以在https://source.android.com/devices/tech/dalvik/dalvik-bytecode.html和https://github.com/JesusFreke/smali/wiki/Registers
这些内容记录在https://source.android.com/devices/tech/dalvik/dalvik-bytecode.html
invoke-static用于调用静态方法(始终被视为直接方法)。
invoke-interface用于使用引用接口的method_id来调用接口方法,即在具体类未知的对象上。