java – 如何在类加载时调试注入VM的字节码?
语境:
在我的 Java项目中,我是字节码注入一个类(比如Injected.java),也是字节码,它注入了对Injected.java中方法的引用,这样这个方法就可以设置实例成员的值.这是验证我是字节码注入正确事物的一种方法. 问题: 题: 任何建议表示赞赏. 解决方法
你可以使用
javaassist
让我们一步一步走: >获取要通过字节码注入修改的类文件(例如,Point.class)的内容 BufferedInputStream fin > ClassFile提供了addField()和addMethod()来添加字段或方法(请注意,构造函数被视为字节码级别的方法).它还提供了addAttribute(),用于向类文件添加属性. 请注意,FieldInfo,MethodInfo和AttributeInfo对象包含指向ConstPool(常量池表)对象的链接. ConstPool对象必须与ClassFile对象以及添加到该ClassFile对象的FieldInfo(或MethodInfo等)对象相同.换句话说,不能在不同的ClassFile对象之间共享FieldInfo(或MethodInfo等)对象. 要从ClassFile对象中删除字段或方法,必须首先获取包含该类的所有字段的java.util.List对象. getFields()和getMethods()返回列表.可以通过调用List对象上的remove()来删除字段或方法.可以以类似的方式删除属性.在FieldInfo或MethodInfo中调用getAttributes()以获取属性列表,并从列表中删除一个. MethodInfo minfo = cf.getMethod(“move”); //我们假设移动没有超载. CodeAttribute ca = minfo.getCodeAttribute(); MethodInfo / CodeAttribute中有许多方法可供检查 如果您喜欢,请告诉我.那个案子我将在http://puspendu.wordpress.com/刊登更详细的博客 参考:here (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |