AI代码解释 packageasm.tree.method;importorg.objectweb.asm.ClassWriter;importorg.objectweb.asm.Opcodes;importorg.objectweb.asm.tree.*;importjava.io.File;importjava.io.FileOutputStream;importjava.io.IOException;/** * tree api method 生成字节码 Created by yunshen.ljy on 2015/7/20. */publicclass...
背景 对于ASM插桩来说,可能很多人都不陌生了,但是大多数可能都停留在core api上,对于现在市面上的一些插桩库,其实很多都用tree api进行编写了,因为tree api的简单与明了的特性,也越来越成为许多开源库的选择。(ASM有两套api类型,分别是core 和 tree) ASM介绍 ASM其实就是一个可以编译字节码的工具,比如说我们日...
这样就可以像CoreApi中MethodVisitor提供的visitXX 方法一样,插入在关联的指令前。在TreeApi中可以通过对象的getNext()方法方便找到跳转到的指令,并且移除指令的时候,只要label不变,也不会影响原有的跳转指令的跳转地址。同Core 不同的就是,从调用MethodVisitor各个指令对应的visitXX方法,改成对MethodNode 中InsnList对...
ASM插桩:学完ASM Tree api,再也不用怕hook了 背景 对于ASM插桩来说,可能很多人都不陌生了,但是大多数可能都停留在core api上,对于现在市面上的一些插桩库,其实很多都用tree api进行编写了,因为tree api的简单与明了的特性,也越来越成为许多开源库的选择。(ASM有两套api类型,分别是core 和 tree) ASM介绍 ASM...
package asm.tree; import org.objectweb.asm.tree.ClassNode; import org.objectweb.asm.tree.FieldNode; /** * Created by yunshen.ljy on 2015/7/12. */ public class AFieldTransformer { private int fieldAccess; private String fieldName; private String fieldDesc; public AFieldTransformer(int field...
ASM的TreeApi对于Method的转换、生成也提供了一系列的组件和接口。其功能主要基于前一章提到的MethodNode类。MethodNode中大多数属性和方法都和ClassNode类似,其中最主要的属性就是InsnList了。InsnList是一个双向链表对象,包含了存储方法的字节指令序。先来看下InsnList中的主要是属性和方法。
2. Tree API包括asm-tree.jar和asm-analysis.jar 我们常用的是asm.jar中的ClassReader,classVisitor,ClassWrite这三个类,他们的关系如下: ClassReader拆分 主要负责读取.class文件里的内容,然后拆分成各个不同的部分;如何实现呢? public class ClassReader { ...
·Tree包提供了Java字节码的内存内表示。 ·Analysis包为存储在来自Tree包结构中的Java方法字节码提供了基础的数据流分析和类型检查算法。 ·Commons包(ASM2.0增加)提供了几个通用的字节码转换和简化字节码生成的适配器。 ·Util包包含几个助手类和简单的字节码较验器来方便开发和测试。
DOM 解析方式则会将整个 XML 作为类似树结构的方式读入内存中以便操作及解析,ASM 的 Tree API 类似于这种方式。以下面的 XML 文件为例: 对应的 SAX 和 DOM 解析方式的如下图所示: ASM 核心类介绍 ClassReader 它是字节码读取和分析引擎,帮我们做了最苦最累的解析二进制的 class 文件字节码的活。采用类似于 ...
Tree API,提供了基于树形的编程模型。该模型需要一次性将一个类的完整结构全部读取到内存当中,所以这种方法需要更多的内存。这种编程方式较简单。 Core API 中操纵字节码的功能基于 ClassVisitor 接口。这个接口中的每个方法对应了 class 文件中的每一项。Class 文件中的简单项的访问使用一个单独的方法,方法参数描述了...