在哪里可以找到android代码验证程序的源代码?我想使用invokedynamic
s,但java.lang.VerifyError: Verifier rejected class ...
要从android验证程序获取一些VerifyErrors()。我的代码可以使用普通JVM正常运行,没有任何验证问题,但是android验证程序拒绝了它,我想分析为什么这样做。我似乎无法在线找到验证程序源代码,但是如果它在我的设备上运行,它必须在某个地方。
首先,JVM和Android使用完全不同的字节码格式(分别为classfiles和Dex)。尽管它们相似,但是它们各自具有不同的操作码和编码方法,以及不同的功能和边缘情况。有一些工具可以相互翻译,但是由于存在差异,您无法始终准确地翻译所有内容。
自2016年左右以来,我还没有详细研究Android字节码,但当时根本不支持invokedynamic *。此外,Android拥有众多验证程序-首先是Dalvik,但随后速度太慢,因此他们转向了ART。它们应该具有相似的行为,但是,当然,每个都是独立的代码库,具有自己的各种错误。(顺便提一句,在JVM端,还有两个验证器,即基于旧推理的验证器和新的堆栈映射验证器,它们也有自己的错误,尽管由于没有像Android那样快速发展而通常不多)。
无论如何,看起来ART验证程序源代码在这里。
*编辑:看起来Android以后已经添加了invoke-custom
操作码,它invokedynamic
等效。与Dex一样,两者之间也存在细微的差异。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句