我正在寻找一个用于C或C++中Java的BCI(Bytecode Instrumentation)库,用于JVMTI代理。
最好的情况是类似于纯C.中的ASM或BCEL
到目前为止,我发现的最接近的东西只是Kelly O'Hair几年前写的一个演示java_crw_demo
,从那时起,它就被用于Sun的/Oracle教程中。
你还知道什么吗?
一些基本原理:我正在构建一个插入工具,向
java.lang.Object
添加一个getter方法,并在Object
的每个直接子类中重载这个getter。由于这个原因,我不能使用Java代理。此外,出于复杂性和速度的原因,我希望避免生成辅助JVM来执行检测。
我很早以前就开始用C编写一个,但由于缺乏动力,我没有走多远。AFAIK C中没有公开版本,但根据JVM规范编写一个简单的版本来满足您的需求应该不会太难。您应该对class
文件格式的章节以及指令集的章节特别感兴趣。
我找到的唯一合理的解决方案是将字节码通过管道传输到使用ASM(或您选择的BCI框架)的单独Java程序。这并不快,但每个插入指令的类只需要执行一次。