4

我一直在 smali 中寻找一个简单的方法(来自这里的 Android),并且我想知道如何对它做一些简单的事情,比如 return 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 时返回导致问题(期待 REGISTER?)所以我想知道我到底需要做什么。

一个解决方案,以及一个解释,将不胜感激!不是为了什么特别的,我就是喜欢看这个东西。

4

1 回答 1

15

您可以通过编写一个快速的 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
于 2013-08-26T23:32:08.127 回答