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的地方,如下调用就可以了。

  • 相关阅读:
    POJ 3253 Fence Repair
    POJ 2431 Expedition
    NYOJ 269 VF
    NYOJ 456 邮票分你一半
    划分数问题 DP
    HDU 1253 胜利大逃亡
    NYOJ 294 Bot Trust
    NYOJ 36 最长公共子序列
    HDU 1555 How many days?
    01背包 (大数据)
  • 原文地址:https://www.cnblogs.com/wangaohui/p/5071647.html
Copyright © 2011-2022 走看看