Android 什么是Smali代码
我将学习一点关于Dalvik VM、dex和Smali的知识 我读过关于smali的文章,但仍然不能清楚地理解它在编译器链中的位置。它的目的是什么。Android 什么是Smali代码,android,dalvik,dex,vm-implementation,smali,Android,Dalvik,Dex,Vm Implementation,Smali,我将学习一点关于Dalvik VM、dex和Smali的知识 我读过关于smali的文章,但仍然不能清楚地理解它在编译器链中的位置。它的目的是什么。 这里有一些问题: 正如我所知,dalvik和其他虚拟机一样运行字节码,在Android中是dex字节码 什么是斯玛利?Android操作系统或Dalvik虚拟机是否直接使用它,或者它只是相同的dex字节码,但对人类来说更具可读性 它是否有点像Windows的Disassembler(如OllyDbg)程序可执行文件,由不同的机器代码组成(例如D3、
这里有一些问题:
提前感谢。创建应用程序代码时,apk文件包含一个.dex文件,其中包含二进制Dalvik字节码。这是平台实际理解的格式。然而,读取或修改二进制代码并不容易,因此有一些工具可以在人类可读的表示形式之间进行转换。最常见的人类可读格式称为Smali。这与您提到的伪装者基本相同 例如,假设您有这样的Java代码
intx=42
假设这是第一个变量,那么该方法的dex代码很可能包含十六进制序列
13 00 2A 00
如果你在上面运行baksmali,你会得到一个包含行的文本文件
const/16 v0,42
这显然比二进制代码可读性好得多。但是这个平台对smali一无所知,它只是一个让字节码更容易使用的工具
Dalvik和ART都接受包含Dalvik字节码的.dex文件。对于应用程序开发人员来说,这是完全透明的,唯一的区别在于安装和运行应用程序时,幕后会发生什么。您能建议阅读一些内容来深入了解这一点吗?这对我来说非常有趣,因为smali无法映射到Java代码1:1,所以您可以在上看到dex格式的详细信息。反编译是有损的。只是澄清一下,反编译到Java是有损的(正如锑所提到的),这意味着代码可能足够好,可以获得它正在做的事情的要点,但不足以重新构建apk。使用apktool反编译为smali的apk可以修改(更改资源、注入代码、修改代码),然后重新构建到工作的apk中。@MehranTorki Java和Dalvik字节码都有goto指令。但是在Java语言级别上没有goto的等价物,这可能就是您的意思。字节码不是源语言的1:1映射。