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