in agent/src/main/java/org/mvndaemon/mvnd/agent/Agent.java [40:71]
public static void premain(String args, Instrumentation instrumentation) throws Exception {
instrumentation.addTransformer(new ClassFileTransformer() {
@Override
public byte[] transform(
ClassLoader loader,
String className,
Class<?> classBeingRedefined,
ProtectionDomain protectionDomain,
byte[] classfileBuffer)
throws IllegalClassFormatException {
if ("java/lang/ProcessBuilder".equals(className)) {
try {
ClassPool pool = ClassPool.getDefault();
CtClass clazz = pool.get("java.lang.ProcessBuilder");
pool.importPackage("org.mvndaemon.mvnd.pump");
clazz.getDeclaredMethod(
"start",
new CtClass[] {clazz.getClassPool().get("java.lang.ProcessBuilder$Redirect[]")})
.insertBefore(START_WITH_PIPES);
byte[] data = clazz.toBytecode();
clazz.detach();
return data;
} catch (Throwable e) {
System.err.println(e);
throw new IllegalClassFormatException(e.toString());
}
} else {
return classfileBuffer;
}
}
});
}