我做了一个只有一个方法的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()
来获取返回寄存器的值在运行时。有人可以帮我吗?
感谢。
答案 0 :(得分:0)
我通过修改我的方法解决了问题的第一部分:
.method public static add_trace(Ljava/lang/String;)V
.locals 1
.param p0, "my_message" # Ljava/lang/String;
.prologue
const-string v0, "my_tag"
.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 static add_trace(Ljava/lang/String;Ljava/lang/Object;)V
.locals 3
.param p0, "my_message" # Ljava/lang/String;
.param p1, "returned_register" # Ljava/lang/Object;
.prologue
.line 25
const-string v0, "my_tag"
new-instance v1, Ljava/lang/StringBuilder;
invoke-direct {v1, p0}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
const-string v2, ":"
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
invoke-virtual {p1}, Ljava/lang/Object;->toString()Ljava/lang/String;
move-result-object v2
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v1
invoke-static {v0, v1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
.line 48
return-void
.end method