logcat
これまでのところ、任意のメソッドにトレースを追加するために、メソッドを 1 つだけ使用して smali クラスを作成しました。アプリをコンパイルして起動できますが、メソッドは何も出力しません。
このローカル パラメータの単純tag
なローカル パラメータが 1 つあり、トレースを追加するメソッドから取得します。何か問題があると思いますが、dalvik デバッガーは何も問題を出力しないため、自分の間違いがどこにあるのかわかりません。logcat
v0
p0
以下は私のコードです。
.class public Landroid/MyCustomClass;
.super Ljava/lang/Object;
.source "MyCustomClass.java"
.method public static add_trace(Ljava/lang/String;)V
.locals 1
.prologue
const-string v0, "myTag"
.line 10
invoke-static {v0, p0}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
.line 13
return-void
.end method
メソッドを呼び出す方法の例を次に示します。
.method public constructor <init>()V
.locals 1
.prologue
.line 157
const-string v0, "settings.properties"
invoke-direct {p0, v0}, Lse/smartrefill/AbstractApplication;-><init>(Ljava/lang/String;)V
.line 158
# has been edited
const-string v0, "<init>()V"
invoke-static {v0}, Landroid/MyCustomClass;->add_trace(Ljava/lang/String;)V
return-void
.end method
さらに先に進むために、メソッドの返されたレジスタの値も出力する方法があるかどうかを知りたいです。
Java のすべてのタイプの変数は Object から継承され、Object にはメソッドがあるtoString()
ため、理論的にはメソッドをカスタマイズadd_trace()
して実行時に返されたレジスタの値を取得できることを認識しています。誰かがそれを手伝ってくれますか?
ありがとう。