如果我想使用字节代码检测来实现分析器,我应该使用 JVMTI 编写本机代理,还是应该编写< strong> java代理使用java.lang.instrument
包吗?
如果我想使用像ASM这样的库 - 如果你想创建一个严肃的探查器似乎是强制性的 - 我必须使用java代理。这使我感到困惑,因为我认为本机代理可以完成Java代理可以做的所有事情。但对我来说,编写java代理似乎更容易。
有替代品吗?是否应该使用java代理和本地代理组合?
答案 0 :(得分:5)
几乎每个人都编写一个java代理(使用ASM或BCEL),因为他们不想从头开始编写C / C ++字节码工具,因为没有公开可用。
您无法做的是仪器和配置文件/监视原始JVM,访问本机功能需要JNI调用。还有一些JVMTI调用可能对您无法使用(如果内存服务)。
几年前我用C语言编写了自己的乐器,我正在编写一个新的乐器,我希望开源(取决于我邪恶的霸主:-))你的本地代理发送字节码的中途宿舍,一个独立的预启动JVM怎么样?在那个JVM中,您可以轻松地编写基于ASM的仪器,并通过线路将生成的字节码发送回本机代理。是的,它似乎有点过于复杂,但编写自己的BCI库更容易。