我一直在寻找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时期待返回导致问题(期待REGISTER?),所以我想知道我到底需要做什么。
解决方案以及解释将不胜感激!这不是特别的,我只是想看看这些东西。
答案 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