安卓验证器的源代码在哪里



在哪里可以找到android代码验证器的源代码?我想使用invokedynamic,但从android验证器中获得一些VerifyErrors(java.lang.VerifyError: Verifier rejected class ...(。我的代码完美地使用普通JVM,没有验证问题,但android验证器拒绝了它,我想分析它为什么会这样做。我似乎在网上找不到验证器的源代码,但如果它在我的设备上运行,它必须在某个地方。

首先,JVM和Android使用完全不同的字节码格式(分别为classfiles和Dex(。尽管它们很相似,但它们都有不同的操作码和编码方法,以及不同的功能和边缘情况。有一些工具可以将一个翻译成另一个,但考虑到差异,你不可能总是准确地翻译所有内容。

自2016年左右以来,我就没有详细研究过Android字节码,但当时根本不支持invokedynamic。此外,安卓系统有很多验证器-首先是Dalvik,但后来太慢了,所以他们转向了ART。它们被认为是行为相似的,但当然,每个都是一个独立的代码库,有自己的各种错误。(很明显,在JVM方面,还有两个验证器,旧的基于推理的验证器和新的堆栈映射验证器,它们也有自己的错误,尽管由于没有像Android那样快速发展,通常没有那么多(。

不管怎样,看起来ART验证器的源代码就在这里。

*编辑:看起来Android已经添加了invoke-custom操作码,相当于invokedynamic。与所有事物一样,Dex,两者之间也有细微的区别。

最新更新