From eeac095187317b26336105b70648c36e83447e24 Mon Sep 17 00:00:00 2001 From: "novice.li" Date: Sun, 25 Feb 2024 09:03:30 +0800 Subject: [PATCH] use VMOptions instead of System --- .../main/java/win/novice/li/AgentMain.java | 6 ++-- .../main/java/win/novice/li/SystemAdvice.java | 31 ------------------- .../java/win/novice/li/VMOptionsAdvice.java | 19 ++++++++++++ 3 files changed, 22 insertions(+), 34 deletions(-) delete mode 100644 jetbra-agent/src/main/java/win/novice/li/SystemAdvice.java create mode 100644 jetbra-agent/src/main/java/win/novice/li/VMOptionsAdvice.java diff --git a/jetbra-agent/src/main/java/win/novice/li/AgentMain.java b/jetbra-agent/src/main/java/win/novice/li/AgentMain.java index facb929..9b28fae 100644 --- a/jetbra-agent/src/main/java/win/novice/li/AgentMain.java +++ b/jetbra-agent/src/main/java/win/novice/li/AgentMain.java @@ -25,10 +25,10 @@ public class AgentMain { .on(ElementMatchers.named("openServer").and(ElementMatchers.takesArgument(0, String.class))))) .asTerminalTransformation() - .type(ElementMatchers.named("java.lang.System")) + .type(ElementMatchers.named("com.intellij.diagnostic.VMOptions")) .transform((builder, typeDescription, classLoader, module, protectionDomain) -> builder - .visit(Advice.to(SystemAdvice.class) - .on(ElementMatchers.named("getProperty")))) + .visit(Advice.to(VMOptionsAdvice.class) + .on(ElementMatchers.named("getUserOptionsFile")))) .asTerminalTransformation() .installOn(inst); diff --git a/jetbra-agent/src/main/java/win/novice/li/SystemAdvice.java b/jetbra-agent/src/main/java/win/novice/li/SystemAdvice.java deleted file mode 100644 index bb490b5..0000000 --- a/jetbra-agent/src/main/java/win/novice/li/SystemAdvice.java +++ /dev/null @@ -1,31 +0,0 @@ -package win.novice.li; - -import net.bytebuddy.asm.Advice; - -import java.util.Objects; - -public class SystemAdvice { - - - // System.getProperty - @Advice.OnMethodExit - public static void intercept(@Advice.Argument(0) Object x, @Advice.Return(readOnly = false) String r) throws Exception { - if (Objects.equals(x, "jb.vmOptionsFile")) { - RuntimeException exception = new RuntimeException(); - int nullCnt = 0; - boolean hasReflect = false; - for (StackTraceElement element : exception.getStackTrace()) { - if (element.getFileName() == null) { - nullCnt += 1; - continue; - } - if (element.getFileName().equals("Method.java")) { - hasReflect = true; - } - } - if (nullCnt >= 3 && hasReflect) { - r = null; - } - } - } -} diff --git a/jetbra-agent/src/main/java/win/novice/li/VMOptionsAdvice.java b/jetbra-agent/src/main/java/win/novice/li/VMOptionsAdvice.java new file mode 100644 index 0000000..a72fb60 --- /dev/null +++ b/jetbra-agent/src/main/java/win/novice/li/VMOptionsAdvice.java @@ -0,0 +1,19 @@ +package win.novice.li; + +import net.bytebuddy.asm.Advice; + +import java.nio.file.Path; + +public class VMOptionsAdvice { + + @Advice.OnMethodExit + public static void intercept(@Advice.Return(readOnly = false) Path r) throws Exception { + RuntimeException e = new RuntimeException(); + for (StackTraceElement stackTraceElement : e.getStackTrace()) { + if (stackTraceElement.getFileName() == null){ + r = null; + break; + } + } + } +}