繁体   English   中英

字节码操作清单条目

[英]Bytecode manipulation manifest entries

我正在做一些Java字节码修改教程。 所有这些都声明我需要设置以下清单attirbutes:Can-Redefine-Classes:true Can-Retransform-Classes:true Can-Set-Native-Method-Prefix:true它完全没问题,但没有一个教程解释属性究竟做了什么。 oracle文档非常简洁,除了Can-Set-Native-Method-Prefix:我假设允许使用本机方法,因为它们不能简单地改为Java方法......

任何人都可以解释重新定义和重新转换类之间的区别吗?

首先,这些属性通常不是字节码操作所必需的。 他们使用JVM的检测功能为java代理请求特殊功能。 例如,通过组装字节码来创建新类,而不使用它们。

重新定义意味着在任意时间点,代理将调用Instrumentation. redefineClasses Instrumentation. redefineClasses更改现有(和已加载)类的实际定义。 代理将提供新定义的字节码。

重新转换是指类文件转换的过程,通常在类加载时应用 代理可以注册一个接一个地调用的ClassFileTransformer ,以便在初始化类之前将转换应用于字节代码。 因此, Retransformation指的是JVM为已经加载的类重复此过程的能力。 在这种情况下,代理可以调用Instrumentation.retransformClasses指定要重新转换但没有字节码的类。 相反,JVM将调用所有已注册的可ClassFileTransformer转换的ClassFileTransformer提供实际的字节码(或链式变换器的前一个变换器的结果)。

设置本机方法前缀更加特殊; 在检测本机方法时它可能很有用。

所以你看,在玩字节码时你不太可能总是需要所有这些功能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM