gpt4 book ai didi

java - 从 Unsafe 创建的匿名类构建 ClassReader

转载 作者:太空宇宙 更新时间:2023-11-04 13:47:33 34 4
gpt4 key购买 nike

我尝试从匿名类构建 ASM ClassReader,但失败了。

匿名类的创建者:

         Class cls = Unsafe.defineAnonymousClass(Hoster, byte[], null);

cls.getName() 是class code.jit.asm.example.Callee/629106582,它与我们看到的传统名称有些不同:class code.jit.asm.example.Callee

然后我尝试了:

a)  ClassReader cr = new ClassReader(cls.getName())

b) public static InputStream getClassInputStream(Class cls){
String classAsPath = cls.getName().replace('.', '/') + ".class";
return cls.getClassLoader().getResourceAsStream(classAsPath);
//return cls.getResourceAsStream(classAsPath);
}
ClassReader cr = new ClassReader(getClassInputStream(cls))

a) 和 b) 都会引发相同的异常:

java.io.IOException: Class not found
at org.objectweb.asm.ClassReader.readClass(ClassReader.java:455)
at org.objectweb.asm.ClassReader.<init>(ClassReader.java:

如何获得匿名类的输入流?

最佳答案

ASM 无法读取类文件,因为您尝试查找的代码不是由 ASM 通常从中读取类文件的类加载器提供的。但是,您可以使用 Java 代理访问字节码,正如我在这个答案中所解释的:Can you inspect the byte code of a Java 8 lambda at runtime?

关于java - 从 Unsafe 创建的匿名类构建 ClassReader,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30678362/

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