В настоящее время я изучаю отладочный код smali и использую этот инструмент (https://github.com/devadvance/rootinspector) в качестве примера.
В одном фрагменте кода он был написан следующим образом
public boolean checkRootMethod3() {
Log.d(Main.TAG, "check4");
try {
File file = new File("/system/xbin/su");
return file.exists();
} catch (Exception e) {
return false;
}
}
Соответствующий код smali выглядит следующим образом:
.method public checkRootMethod3()Z
.locals 4
.prologue
.line 76
const-string v2, "RootInspector"
const-string v3, "check4"
invoke-static {v2, v3}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
.line 78
:try_start_0
new-instance v1, Ljava/io/File;
const-string v2, "/system/xbin/su"
invoke-direct {v1, v2}, Ljava/io/File;-><init>(Ljava/lang/String;)V
.line 79
.local v1, "file":Ljava/io/File;
invoke-virtual {v1}, Ljava/io/File;->exists()Z
:try_end_0
.catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_0
move-result v2
.line 81
.end local v1 # "file":Ljava/io/File;
:goto_0
return v2
В окне «Переменные» отладчика Intellij я могу видеть только объект «this» и переменную File, когда я прохожу код.
Можно ли каким-либо образом изменить виртуальные регистры (v1, v2 и т. Д.) Напрямую, поскольку один из виртуальных регистров содержит возвращаемое значение.