2011-09-06 24 views
5

如果我想用字节代码装备实现探查,应该写些什么使用JVMTI或者我应该写使用java.lang.instrumentJava代理一个本地代理字节代码检测 - 实现本机或Java代理?

如果我想使用像ASM这样的库 - 如果你想创建一个严格的分析器,这似乎是必须的 - 我必须使用java代理。这让我感到困惑,因为我认为一个本地代理可以完成java代理可以做的所有事情以及更多。但对我来说,写一个Java代理似乎更容易。

有替代品吗?应该使用Java代理和本地代理吗?

回答

5

几乎每个人都会写一个Java代理(带有ASM或BCEL),因为他们不想从头开始编写C/C++字节码工具,因为没有公开提供。

你不能做的是仪器和配置文件/监视原始JVM,并且访问本地函数需要JNI调用。还有几个JVMTI调用可能对您不可用(如果内存服务)。

几年前我写我自己的instrumentor在C,和我在写一个新的,我希望开源的过程(根据我的邪恶领主:-))

怎么样一半的房子,一个单独的预启动JVM,您的本地代理发送字节码。在该JVM中,编写基于ASM的工具非常容易编写,可以很好地工作,并通过网络将生成的字节码发送回本地代理。是的,它看起来有点过于复杂,但编写自己的BCI库会更容易。

+1

您对预启动JVM有何意义?那会包括两个JVM吗?一个用于分析,一个用于运行实际应用程序?为什么本地代理应该发送字节码?我认为这是我们应该避免的事情。 –