[英]How to load a Java class from the classpath *as a byte array* for bytecode injection?
我的Java类路径中有一个类com.mycompany.MyBadClass
。
我想仪器JVM有javaagent
交换MyBadClass
为MyGoodClass
,这也是在类路径中。
public static class BugFixAgent {
public static void premain(String args, Instrumentation inst) {
inst.addClassFileTransformer(new ClassFileTransformer() {
@Override
public byte[] transform(ClassLoader loader,
String className,
Class<?> classBeingRedefined,
ProtectionDomain protectionDomain,
byte[] classfileBuffer) {
if (className.equals("com/mycompany/MyBadClass")) {
return patchedClassAsByteArray; // <====== ??????
} else {
return null; // skips instrumentation for other classes
}
}
});
}
}
所以我的问题是:如何以编程方式从类路径中加载com.mycompany.MyGoodClass
byte array
?
你可以得到一个InputStream与
loader.getResourceAsStream(name + ".class");
然后可以将其转换为字节数组。
你基本上想
如果您的类路径仅包含目录名称,那将非常简单-但也许您的类位于某个JAR中,然后需要做更多的工作。
但正如所说:核心是最初的“扫描”。 那是一个(某种程度上)解决的问题,它只需要“工作”就可以完成。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.