在smali中添加跟踪的方法

时间:2015-06-28 15:53:16

标签: android reverse-engineering trace smali

我做了一个只有一个方法的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()来获取返回寄存器的值在运行时。有人可以帮我吗?

感谢。

1 个答案:

答案 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
相关问题