ASM 从类文件中读入信息后,能够改变类行为,分析类信息,甚至能够根据用户要求生成新类。说白了asm是直接通过字节码来修改class文件。另外除了 asm 可以操作字节码,还有javassist和Byte-code等,他们比 asm 要简单,但是执行效率还是 asm 高。因为 asm 是直接使用指令来控制字节码。 三、实现方案 按照图中我们使用javaA...
Can-Retransform-Classes和Can-Redefine-Classes设置为true。另外,当我在代理的premain方法中将变压器添加到Instrumentation时,我这样做: cpp publicstaticvoidpremain(String agentArgs, Instrumentation inst){ inst.addTransformer(newPyClassFileTransformer(inst),true); } __EOF__...
7.https://medium.com/@Alibaba_Cloud/how-to-use-java-agents-with-asm-bytecode-framework-fb9ca5330dfc 8. Instrumentation 简介 https://www.ibm.com/developerworks/cn/java/j-lo-jse61/ 9. Guide to Java Instrumentation https://www.baeldung.com/java-instrumentation 10.CLassFileTransformerhttps://ud...
这里主要通过传入进行的类加载器、类名、字节码等,负责字节码的增强操作。而这里会使用 ASM 方式进行处理,如下; private byte[] getBytes(ClassLoader loader, String className, byte[] classfileBuffer) { ClassReader cr = new ClassReader(classfileBuffer); ClassWriter cw = new ClassWriter(cr, ClassWriter....
Java-debug-tool在实现上使用了ASM工具来进行字节码增强,并且每个插桩点都可以进行配置,如果不想要什么信息,则没必要进行对应的插桩操作。这种可配置的设计是非常有必要的,因为有时候我们仅仅是想要知道方法的入参和出参,但Java-debug-tool却给我们返回了所有的调试信息,这样我们就得在众多的输出中找到我们所关注的内...
Java探针技术-如何从asm代码中正确使用Instrumentation.retransformClasses(),我使用asm库来执行一些Java字节码修改-特别是修改我的类来实现一个新的接口和相关的方法。我目前的做法是通过javaagent使用核心asmAPI。我想保留这种动态方法,而不是静态修改.class文件。在更
API有点混乱,因为这个项目多年来一直在发展。有关于该框架的文档,但不像ASM那样集中。
6. 参考文献 ASM 4 guide Java Virtual Machine Specification JVM Tool Interface alibaba arthas openjdk 7. 作者简介 胡健,美团到店餐饮研发中心研发工程师。 --- END ---
ASM 可以直接产生二进制 class 文件,也可以在类被加载入 Java虚拟机之前动态改变类行为。Java class 被存储在严格格式定义的 .class 文件里,这些类文件拥有足够的元数据来解析类中的所有元素:类名称、方法、属性以及 Java 字节码(指令)。ASM 从类文件中读入信息后,能够改变类行为,分析类信息,甚至能够根据用户要求...
启动Java程序时添加-javaagent(Instrumentation API实现方式)或-agentpath/-agentlib(JVMTI的实现方式)参数,如java -javaagent:/data/XXX.jar Test。 JDK1.6新增了attach(附加方式)方式,可以对运行中的Java进程附加Agent。 第一种方式只能在程序启动时指定Agent文件,而attach方式可以在Java程序运行后根据进程ID动态注入...