【发布时间】:2010-12-04 12:56:36
【问题描述】:
我目前正在对 smali/"code obfuscator" 进行一些研究,目前正在尝试熟悉反编译的源代码。为此,我创建了一个简单的应用程序并通过 smali 对其进行反编译。
我现在正在尝试了解反编译的源代码,以便在以后使用代码混淆器后改进和比较安全性(针对反编译)。虽然大部分 smali 源代码都没有那么难,但我有时还是会遇到数字格式转换的问题。
你可以给我解释一下吗?下一行。我猜它的值应该是 5,但我不确定这是哪种二进制格式。如何计算 0x4014 = 5 ???
const-wide/high16 v0, 0x4014 // 100000000010100 (5 = 101)
附上此测试功能的完整java和smali代码源:
Java 源代码:
boolean test(int a, double d) {
if (a < 5 && d < 5)
return true;
else
return false;
}
小源:
.method test(ID)Z
.locals 2
.parameter "a"
.parameter "d"
.prologue
.line 28
const/4 v0, 0x5
if-ge p1, v0, :cond_0
const-wide/high16 v0, 0x4014
cmpg-double v0, p2, v0
if-gez v0, :cond_0
.line 29
const/4 v0, 0x1
.line 31
:goto_0
return v0
:cond_0
const/4 v0, 0x0
goto :goto_0
.end method
【问题讨论】:
-
我应该使用反编译的源代码在android开发中再次运行吗?
-
回滚 3rd 方编辑,这与提出的实际问题大体上不一致 - 这实际上不是一个混淆问题(还),它确实涉及 smali 中的浮点表示。
标签: android floating-point decompiling opcodes