基本上,我正在尝试编写一些列出JVM加载的每个类的东西.我写的是有效的,但它只适用于它运行的jvm.
我精心设计了一个 java代理来动态注入另一个JVM,但后来意识到我实际上并不知道如何注入它.
我如何实际将此代理发送到另一个JVM?
可能吗?
我精心设计了一个 java代理来动态注入另一个JVM,但后来意识到我实际上并不知道如何注入它.
我如何实际将此代理发送到另一个JVM?
可能吗?
解决方法
动态代理需要声明在目标VM中附加时执行的agentmain(String,Instrumentation)方法.您可以使用tools.jar依赖项,它(仅限
Java 9)仅包含在JDK中,但不包含在JRE中.但是,您可以将代理程序与JDK捆绑在一起,并从那里附加到JVM.
最大的问题是不同的虚拟机API有所不同;但是,您可以使用像byte-buddy-agent这样的库,其中包含不同VM的不同实现.附件将通过以下方式完成:
ByteBuddyAgent.attach("my.jar","my-pid");
这会将my.jar中包含的代理程序附加到具有id my-id的Java进程上.