远程运行时检测

Remote Runtime Instrumentation

我是仪器界的新手。 我正在尝试在运行时检测远程 JVM。 实际上,我必须记录所有 类 或其中的一部分并转换它们.. 我阅读了很多文档,发现了这段代码 HERE

我更改了代码并替换了

// Run sayHello in a loop
Person person = new Person();
for(int i = 0; i < 1000; i++) {
    person.sayHello(i);
    person.sayHello("" + (i*-1));
    Thread.currentThread().join(5000);
}

来自这个:

for (int i = 1; i < args.length; i++) {
    String className = args[i] ;
    System.out.println("className" + className);
    // Call transformClass on the transformer MBean
    server.invoke(on, "transformClass", new Object[]{className}, new String[]{String.class.getName()});
}

但我发现 args.length=0 我不知道 args[] 包含什么...如果它包含加载的 类(我假设)那么为什么它是空的..

有什么帮助吗?

我写了那个代码,但我不明白你想在你的代码中做什么。引用的 github 要点参考了 this SO question 的答案,因此它可能会帮助您重新阅读该问题。

涉及到多个步骤,classes需要具体的打包方式,但基本是:

  1. 使用 AgentInstaller 将检测代理安装到 运行 JVM 中。
  2. 通过 JMX 连接到 JVM。
  3. 调用 transformClass(String className, String methodName, String methodSignature) MBean 操作以使用演示转换器检测 class。