到目前为止,我做了一个只有一种方法的 smali 类,以便logcat
为任何方法添加跟踪。我可以编译并启动应用程序,但该方法什么也没打印。
我有一个本地参数,tag
对于logcat
这个本地参数来说很简单v0
,我从要添加跟踪的方法中得到它。还有一个参数p0
。我相信有问题,但 dalvik 调试器没有打印任何错误,因此我不知道我的错误在哪里。
下面是我的代码。
.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()
以在运行时获取返回的寄存器的值。有人可以帮我吗?
谢谢。