gpt4 book ai didi

java - 字节码操作 list 条目

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:16:10 26 4
gpt4 key购买 nike

我在做一些 Java 字节码修改教程时很开心。他们都说我需要设置以下 list 属性:可以重新定义类:true可以重新转换类:true可以设置 native 方法前缀:true完全没问题,但是没有一个教程解释这些属性到底做了什么。 oracle 文档非常简洁,除了 Can-Set-Native-Method-Prefix: true 我认为它也允许检测 native 方法,因为它们不能简单地更改为 Java 方法...

谁能解释一下类的重新定义和重新转换之间的区别是什么?

最佳答案

首先,这些属性对于一般的字节码操作来说不是必需的。他们在那里使用 instrumentation 请求 java 代理的特殊功能。 JVM 的特性。例如。在没有它们的情况下,通过组装字节码创建新类也是可行的。

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

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

Setting a native method prefix更特别;在检测 native 方法时它可能很有用。

所以你看,在使用字节码时,你不太可能真的需要所有这些功能。

关于java - 字节码操作 list 条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20068784/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com