pde*_*eva 4 java instrumentation bytecode native bytecode-manipulation
对于java中的字节码检测,有asm框架和bcel和javaassist库.
但是我需要在本机代码中进行检测,因为javaagent运行时已经加载了一些java类,例如java.lang.Thread,java.lang.Class等.
是否有任何库用于在本机代码中检测java类?
编辑:似乎有点混乱.
我想要的是:创建一个本机java代理,它使用JVMTI apis在加载类时使用OnClassLoad事件挂钩更改类的字节码.
我在博士研究期间遇到了这个问题.对我来说最有效的答案是使用java库(我使用ASM)在单独的JVM中执行字节码修改.
我使用JVMTI类加载挂钩来捕获类文件,并使用tcp连接将其传输到单独的JVM.在单独的JVM中修改了类后,我将其返回给JVMTI代理,后者将其复制到VM内存中,并将指向修改后的类文件的指针返回给JVM.
我发现在同一个JVM中编写类很难被分析,因为我想要修改的系统类文件(例如java.lang.Object)必须在我需要执行编织的任何类文件之前加载.在确定我最终使用的单独JVM方法之前,我没有成功地寻找c/c ++字节码库.
您可以使用weaver JVM的主机名/端口参数化JVMTI代理,也可以使用某种形式的发现,具体取决于您的要求.
Mar*_*bst -2
一旦类被加载,就不能更改它的字节码。您可以确保您的检测在加载之前运行,也可以创建一个新的 ClassLoader,并通过不询问父类来重新加载其中的类。但是,您不能将这些类与在 ClassLoader 外部加载的代码一起使用,因为该代码将引用较早加载的未更改的类。