首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >方法在smali中添加跟踪。

方法在smali中添加跟踪。
EN

Stack Overflow用户
提问于 2015-06-28 23:53:16
回答 1查看 2.1K关注 0票数 0

到目前为止,我做了一个只有一个方法的小类,用于向任何方法添加logcat跟踪。我可以编译和启动应用程序,但该方法不打印任何内容。

我有一个本地参数,它是logcat的一个简单的tag,这个本地参数是v0,我从我想要添加跟踪的方法中得到它。和参数p0。我相信有什么问题,但是dalvik调试器没有打印出任何错误,因此我不知道我的错误在哪里。

下面是我的代码。

代码语言:javascript
复制
.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

下面是我如何调用该方法的一个示例:

代码语言:javascript
复制
.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()来获取运行时返回的寄存器的值。有人能帮我一下吗?

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2015-06-29 02:58:07

我通过如下修改我的方法解决了问题的第一部分:

代码语言:javascript
复制
.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

下面是我打印返回的寄存器的代码,不过我还没有测试它:

代码语言:javascript
复制
.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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31101740

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档