feat: support probe shell generation

This commit is contained in:
ReaJason
2025-08-13 23:53:40 +08:00
parent 6a4c5a1e96
commit 13be57e66d
304 changed files with 59084 additions and 1454 deletions
@@ -1,9 +1,9 @@
package com.reajason.javaweb;
import net.bytebuddy.jar.asm.ClassReader;
import net.bytebuddy.jar.asm.ClassVisitor;
import net.bytebuddy.jar.asm.ClassWriter;
import net.bytebuddy.jar.asm.Opcodes;
import org.objectweb.asm.ClassReader;
import org.objectweb.asm.ClassVisitor;
import org.objectweb.asm.ClassWriter;
import org.objectweb.asm.Opcodes;
/**
* @author ReaJason
@@ -9,10 +9,15 @@ import net.bytebuddy.jar.asm.Opcodes;
import net.bytebuddy.pool.TypePool;
import org.jetbrains.annotations.NotNull;
import java.util.Collections;
import java.util.Set;
import java.util.stream.Collectors;
import static net.bytebuddy.matcher.ElementMatchers.named;
/**
* 静态方法替换
*
* @author ReaJason
*/
public class MethodCallReplaceVisitorWrapper implements AsmVisitorWrapper.ForDeclaredMethods.MethodVisitorWrapper {
@@ -20,11 +25,20 @@ public class MethodCallReplaceVisitorWrapper implements AsmVisitorWrapper.ForDec
private final String targetClassName;
private final Set<String> replaceClassNames;
public MethodCallReplaceVisitorWrapper(String targetClassName, Set<String> replaceClassNames) {
private MethodCallReplaceVisitorWrapper(String targetClassName, Set<String> replaceClassNames) {
this.targetClassName = targetClassName.replace(".", "/");
this.replaceClassNames = replaceClassNames.stream().map(s -> s.replace(".", "/")).collect(Collectors.toSet());
}
public static AsmVisitorWrapper newInstance(String methodName, String className, String replaceClassName) {
return new AsmVisitorWrapper.ForDeclaredMethods()
.method(named(methodName),
new MethodCallReplaceVisitorWrapper(
className,
Collections.singleton(replaceClassName))
);
}
@NotNull
@Override
public MethodVisitor wrap(@NotNull TypeDescription instrumentedType,