以下smali术语是什么意思?

时间:2016-09-29 21:21:06

标签: smali

我最近一直在深入研究一些小编码文件和我不理解的术语,并且没有任何解释(甚至在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?

1 个答案:

答案 0 :(得分:2)

  1. ->是用于表示成员(方法或字段)的语法。
  2. 这些是原始类型。它们记录在https://source.android.com/devices/tech/dalvik/dex-format.html(搜索“TypeDescriptor Semantics”)。另请参阅https://github.com/JesusFreke/smali/wiki/TypesMethodsAndFields
  3. Lcom/google/android/gms/games/achievement/AchievementEntity;->j:I是对字段的引用。 Lcom/google/android/gms/games/achievement/AchievementEntity;是包含字段的类,->是表示成员的语法,j是字段的名称,:只是一个分隔符,I 1}}是字段的类型(int)。

    1. 这些是寄存器。您可以在https://source.android.com/devices/tech/dalvik/dalvik-bytecode.htmlhttps://github.com/JesusFreke/smali/wiki/Registers

    2. 找到更多信息
    3. 这些内容记录在https://source.android.com/devices/tech/dalvik/dalvik-bytecode.html

    4.   

      invoke-static用于调用静态方法(始终被视为直接方法)。

           

      invoke-interface用于使用引用接口的method_id来调用接口方法,即在具体类未知的对象上。

      1. 这些符合接口的标准java概念,以及公共和私有字段。