gpt4 book ai didi

java - 访问类字节?

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

我的目标是访问表示类字节码的 byte[],而无需在运行时明确知道类文件的位置。

我已经研究了两个解决方案,并且能够从其中一个中获得轻微的成功,但我想知道是否有其他方法可以实现它(或者我在第二个解决方案中出错的原因是我不能开始工作)。

我的第一个(稍微)成功的解决方案是使用 java.lang.instrumentation ClassFileTransformer 类来访问类的 byte[]。通过这个工作,我认为必须有一种更简洁的方法来完成此任务。

我的第二个解决方案是使用 -Xbootclasspath JVM 参数将 java.lang.ClassLoader 替换为我自己的,从而允许它访问已加载类的 byte[]。我添加了一个简单的 System.out.println 调试消息来确认 ClassLoader 的覆盖正在工作,但事实并非如此。我从 this paper 得到这个想法在同一主题上。我的类(class)的制作方式与链接论文中重新制作 Integer 类(class)的方式类似。我还为 JVM 参数使用了类似的目录设置,如下所示:

java -Xbootclasspath/p:.\out\production\boot\java\lang TestLoader

我的想法是,不能使用我链接的论文中的方法来覆盖 ClassLoader 类。

我很想知道为什么我重写 ClassLoader 的尝试没有奏效,也很想听听我还能做些什么来访问类的 byte[]。

最佳答案

您可以使用 getResourceAsStream() 读取类字节吗?

InputStream is = String.class.getResourceAsStream("String.class");

编辑添加备选:

(从评论中复制)

鉴于需要涵盖的所有可能性,ClassFileTransformerinstrumentation API可能是要走的路。我不知道“干净”的要求是什么,但是如果问题是必须为 JVM 指定命令行参数,您可以尝试使用 Attach API - 您可以附加到一个已经运行的 Java 进程,插入您的 ClassFileTransformer,并查看所有已经加载到 JVM 中的类以及之后加载的所有类。

关于java - 访问类字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6935282/

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