我将学习一点关于 Dalvik VM、dex 和 Smali 的知识。
我读过关于 smali 的文章,但仍然无法清楚地理解它在编译器链中的位置。以及它的目的是什么。
这里有一些问题:
- 据我所知,dalvik 与其他虚拟机一样运行字节码,而对于 Android,它是 dex 字节码。
- 什么是 smali? Android OS 或 Dalvik Vm 是否直接使用它,或者它只是相同的 dex 字节码但对人类来说更具可读性?
- 它是否类似于 Windows 的反汇编程序(如 OllyDbg)程序可执行文件由不同的机器代码(例如 D3、5F)组成,并且每个机器代码都有适当的汇编命令,但 Dalvik Vm 也是软件,所以 smali 是可读的字节码的表示
- 有新的 ART 环境。它仍然使用字节码还是直接执行 native 代码?
提前谢谢你。
最佳答案
当您创建应用程序代码时,apk 文件包含一个 .dex 文件,其中包含二进制 Dalvik 字节码。这是平台实际理解的格式。但是,读取或修改二进制代码并不容易,因此有一些工具可以与人类可读的表示进行相互转换。最常见的人类可读格式称为 Smali。这个和你说的dissembler本质上是一样的。
例如,假设您有类似的 Java 代码
int x = 42
假设这是第一个变量,那么该方法的 dex 代码很可能包含十六进制序列
13 00 2A 00
如果你在上面运行 baksmali,你会得到一个包含该行的文本文件
const/16 v0, 42
这显然比二进制代码更具可读性。但该平台对 smali 一无所知,它只是一个工具,可以更轻松地处理字节码。
Dalvik 和 ART 都采用包含 dalvik 字节码的 .dex 文件。它对应用程序开发人员完全透明,唯一的区别是应用程序安装和运行时在幕后发生的事情。
关于android - 什么是 Smali Code Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30837450/