zoukankan      html  css  js  c++  java
  • 关于smali插桩

        虽说是老生常谈的东西了,稍微记录一下。

        我觉得最重要的就是寄存器的问题了,如果需要额外的寄存器,要在smali函数的最前面将寄存器数量增加到需要的数量。

        在smali代码中,寄存器有两种表示方式,一种是v命名法,一种是p命名法。在v命名法中,从v0开始依次表示局部变量和参数。在p命名法中,从p0开始表示参数,从v0开始表示局部变量。以p命名法为例,在smali函数的开头,.locals n则表示可以使用v0到vn-1表示局部变量,因此如果插桩的时候需要额外的寄存器,则将.locals n 表示为.locals n+1就可以在插桩的代码中使用vn了。

        我自己写了一个用来log的smali代码,将其放入backsmali后的代码中,并在需要Log的地方调用相应的代码,最后重新打包,运行后就能看到加入的log信息了。

    .class public Liie/wah/smlinject;

    .super Ljava/lang/Object;

    .source "smlinject.java"

    .method public constructor <init>()V

    .registers 1

    .prologue

    invoke-direct {p0}, Ljava/lang/Object;-><init>()V

    return-void

    .end method

    .method public static logString(Ljava/lang/String;)V

    .locals 1

    .prologue

    const-string v0, "WAH"

    invoke-static {v0, p0}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I

    return-void

    .end method

    .method public static logBool(Ljava/lang/Boolean;)V

    .locals 2

    .prologue

    const-string v0, "WAH"

    invoke-static {p0}, Ljava/lang/Boolean;->toString(Z)Ljava/lang/String;

    move-result-object v1

    invoke-static {v0, v1}, Landroid/util/Log;->v(Ljava/lang/String;Ljava/lang/String;)I

    return-void

    .end method

    .method public static logInt(I)V

    .locals 2

    .prologue

    const-string v0, "WAH"

    invoke-static {p0}, Ljava/lang/String;->valueOf(I)Ljava/lang/String;

    move-result-object v1

    invoke-static {v0, v1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I

    return-void

    .end method

        在需要加入log的地方,如下调用就可以了。

  • 相关阅读:
    立则存
    如何在UI控件上绑定一个变量
    欢迎大家使用www.eugene.org.cn访问我的blog
    属性与字段变量的区别
    在C#中联合Excel的Com编程入门
    我和我的土匪奶奶 全集 全 下载 txt
    大菲波数
    Hat's Fibonacci
    Fibonacci 取余,直接做超时
    How Many Fibs? 字符串转换处理
  • 原文地址:https://www.cnblogs.com/wangaohui/p/5071647.html
Copyright © 2011-2022 走看看