bytecode-manipulation - 字节码检测 - 实现 native 或 Java 代理?

标签 bytecode-manipulation jvmti java-bytecode-asm

如果我想使用 实现分析器字节码检测 , 我应该写一个 本地代理使用 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/

相关文章:

java - 在运行时修改Android应用程序

java - 是否可以更轻松地检查方法是否被父类(super class)覆盖?

java - 如何使用 ASM java 库获取 Jar 中存在的类的内部类中的所有方法?

java - 当 Java 应用程序开始执行时产生的这些线程是什么?

java - 需要帮助来理解 Java 字节码指令

java - 使用 Javassist 或 ASM 拦截字段访问

java - MethodVisitor 抛出 ClassFormatError

java - 如何使用ASM重写visitMethod将两个类合并为一个类

java - 为 CPU 分析附加 Java VisualVM 导致 JVMTI 错误 66

java - 如何跟踪 "dtrace style"中的java应用程序?