修改Smali中的现有方法

时间:2013-08-26 22:52:34

标签: java android dalvik smali

我一直在寻找smali中的一个简单方法(来自Android这里),而且我想知道我是如何做一些简单的事情,比如返回false。我一直试图通过与Java对应的比较来理解它,并且我认为我得到了它的大部分工作方式,但是我所做的任何改变似乎并不顺利。

目前,在Java中,方法是:

public static boolean isEnabled(){
    return com.example.test.isEnabled();
}

并且在smali中:

.method public static isEnabled()Z
    .registers 1

    .prologue
    .line 3714
    invoke-static {}, Lcom/example/test;->isEnabled()Z

    move-result v0

    return v0
.end method

在上面的上下文中,我如何修改方法以只执行Java return false;的等效操作?从我能够看到的情况来看,0x0是错误的,但是在编译smali时期待返回导致问题(期待RE​​GISTER?),所以我想知道我到底需要做什么。

解决方案以及解释将不胜感激!这不是特别的,我只是想看看这些东西。

1 个答案:

答案 0 :(得分:9)

你可以通过编写一个快速的java程序,编译它,dx'ing它然后拆解它来相当容易地回答这个问题。

public class EnabledTest {
    public static boolean isEnabled() {
        return false;
    }
}

然后编译/ dx /反汇编

javac EnabledTest.java
dx --dex --output=EnabledTest.dex EnabledTest.class
baksmali EnabledTest.dex

你最终会得到像

这样的东西
.method public static isEnabled()Z
    .registers 1
    const v0, 0
    return v0
.end method