我将学习一些有关 Dalvik VM、dex 和 Smali 的知识。
我已经阅读过有关 smali 的内容,但仍然无法清楚地了解它在编译器链中的位置。以及它的目的是什么。
这里有一些问题:
- 据我所知,dalvik 与其他虚拟机一样运行字节码,对于 Android,它是 dex 字节码。
- 什么是斯马利? Android 操作系统或 Dalvik Vm 是否可以直接使用它,或者它只是相同的 dex 字节码,但对人类来说更具可读性?
- 它是否类似于 Windows 的 dissasembler(如 OllyDbg)程序可执行文件由不同的机器代码(例如 D3 、 5F )组成,并且每个机器代码都有适当的汇编命令,但 Dalvik Vm 也是软件,因此 smali 是字节码的可读表示
- 有新的 ART 环境。它仍然使用字节码还是直接执行本机代码?
先感谢您。
当您创建应用程序代码时,apk 文件包含一个 .dex 文件,其中包含二进制 Dalvik 字节码。这是平台实际理解的格式。然而,读取或修改二进制代码并不容易,因此有一些工具可以在人类可读的表示形式之间进行转换。最常见的人类可读格式称为 Smali。这与您提到的反汇编器本质上是相同的。
例如,假设您有执行类似操作的 Java 代码
int x = 42
假设这是第一个变量,那么该方法的 dex 代码很可能包含十六进制序列
13 00 2A 00
如果你在上面运行 baksmali,你会得到一个包含以下行的文本文件
const/16 v0, 42
这显然比二进制代码更具可读性。但该平台对 smali 一无所知,它只是一个可以更轻松地使用字节码的工具。
Dalvik 和 ART 都采用包含 dalvik 字节码的 .dex 文件。它对应用程序开发人员来说是完全透明的,唯一的区别是应用程序安装和运行时幕后发生的情况。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)