如果我想使用字节码检测来实现分析器,我应该使用JVMTI编写本机代理还是应该使用包编写Java 代理?java.lang.instrument
如果我想使用像ASM这样的库——如果你想创建一个严肃的分析器,这似乎是强制性的——我必须使用 java 代理。这让我很困惑,因为我认为本地代理可以做 Java 代理可以做的所有事情,甚至更多。但对我来说,编写 java 代理似乎更容易。
有替代品吗?无论如何都应该使用Java代理和本机代理吗?
如果我想使用字节码检测来实现分析器,我应该使用JVMTI编写本机代理还是应该使用包编写Java 代理?java.lang.instrument
如果我想使用像ASM这样的库——如果你想创建一个严肃的分析器,这似乎是强制性的——我必须使用 java 代理。这让我很困惑,因为我认为本地代理可以做 Java 代理可以做的所有事情,甚至更多。但对我来说,编写 java 代理似乎更容易。
有替代品吗?无论如何都应该使用Java代理和本机代理吗?
几乎每个人都编写 Java 代理(使用 ASM 或 BCEL),因为他们不想从头开始编写 C/C++ 字节码工具,因为没有公开可用的工具。
您将无法做的是检测和分析/监视原始 JVM,并且访问本机函数需要 JNI 调用。还有几个 JVMTI 调用可能对您不可用(如果有记忆的话)。
几年前我用 C 编写了自己的工具,我正在编写一个新的工具,我希望开源(取决于我邪恶的霸主:-))
半途而废,一个单独的预先启动的 JVM,您的本地代理将字节码发送到该 JVM。在那个 JVM 中,您可以轻松编写基于 ASM 的工具来完成艰苦的工作,并将生成的字节码通过网络发送回本地代理。是的,这似乎有点过于复杂,但编写自己的 BCI 库更容易。