但是,这篇文章暗示Dalvik不执行这种字节码验证。作者做所有普通的x86恶作剧,就像跳进一条指令的中间,这显然是允许的。这是真的? Android VM实际执行任何类型的加载时间字节码验证吗?如果没有,为什么?
#1 楼
这并非完全正确。 Dalvik字节码也将在设备上进行验证,但这是在安装时而不是运行时发生的。 dex文件的经过验证和优化的版本将存储在系统上,并受到文件系统许可的保护(除非您已将设备植根,否则无法更改它)。博客文章是您可以在类标题中设置一个特定的标志,该标志告诉验证者跳过此类。
#2 楼
Android还包含字节码验证,但此步骤已从设备上的类加载移至dex编译器(类似于在J2ME中完成的操作)。文件),您可以修改文件并引入引用的混淆。因此在加载时无需进行进一步的验证。
dex编译器的规范。
删除了加载时对字节码的验证,以延长加载时间(与J2ME中执行此操作的原因相同)。