2016-09-29 130 views
2

我最近一直在深入研究一些smali編碼文件,以及我不明白的術語,並且不會在任何地方解釋(即使在達爾維克opcodes站點中也不例外)。讓我們開始與問題以下smali術語是什麼意思?

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? 

回答

2
  1. ->是用於表示一個構件(無論是方法或字段)的語法。
  2. 這些是原始類型。它們記錄在https://source.android.com/devices/tech/dalvik/dex-format.html(搜索「TypeDescriptor語義」)。另請參見https://github.com/JesusFreke/smali/wiki/TypesMethodsAndFields

Lcom/google/android/gms/games/achievement/AchievementEntity;->j:I是對字段的引用。 Lcom/google/android/gms/games/achievement/AchievementEntity;是包含該字段的類,->是表示成員的語法,j是該字段的名稱,:只是一個分隔符,而I是該字段的類型(int)。

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

  2. 這些都記錄獲取更多的https://source.android.com/devices/tech/dalvik/dalvik-bytecode.html

調用靜態用於調用一個靜態方法(它始終被認爲是直接法)。

invoke-interface用於調用接口方法,即使用引用接口的method_id來調用其具體類未知的對象。

  1. 這些匹配接口,公共和私有字段的標準java概念。