4

私は smali の単純なメソッド (ここでは Android から来ています) を見てきました。Java の対応するものといくつかの例を比較して理解しようとしてきましたが、ほとんどがどのように機能するかを理解していると思いますが、行った変更はうまくいかないようです。

現在、Java のメソッドは次のとおりです。

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

そしてそれは小さいです:

.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 してから、逆アセンブルすることで、これにかなり簡単に答えることができます。

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 に答える