asm
老马啸西风
Github: https://github.com/houbb
Email:houbinbin.echo@gmail.com
展开
-
ASM 系列详细教程-23-ASM Tree API 向后兼容能力
介绍与核心API一样,ASM 4.0的树API中也引入了一种新机制,以确保在将来的ASM版本中向后兼容。但是,这里再次不能单独通过ASM来确保此属性。要求用户在编写自己的文章时遵循一些简单的准则码。本章的目的是介绍这些准则,并给出ASM树API中使用的内部机制的概念,以确保向后兼容。指导方针本节介绍了使用ASM树API时必须遵循的准则,以确保您的代码在以后的任何ASM版本中保持有效(...原创 2019-12-24 20:51:22 · 14641 阅读 · 0 评论 -
ASM 系列详细教程-22-ASM Metadata 元数据 Generic Annotation Debug
元数据本章介绍了用于已编译Java类元数据(例如注解)的树API。之所以很短,是因为这些元数据已经在第4章中介绍过,并且因为一旦知道了相应的 core API,树API就很简单。泛型树API不提供对泛型类型的任何支持!确实,它代表了带有签名的泛型类型,就像在核心API中一样,但是没有提供与SignatureVisitor对应的SignatureNode类,尽管这是可能的(实际上,使用多个...原创 2019-12-24 20:49:38 · 14318 阅读 · 0 评论 -
ASM 系列详细教程-21-ASM Method 方法分析接口与组件
接口和组件用于代码分析的ASM API在 org.objectweb.asm.tree.analysis 软件包中。就像包名称所暗示的那样,它基于树API。实际上,该程序包提供了进行正向数据流分析的框架。为了能够使用或多或少的精确值集执行各种数据流分析,数据流分析算法分为两部分:一个是固定的,由框架提供,另一个是可变的,由用户提供。更确切地说:在Analyzer和Frame类中,一劳...原创 2019-12-24 20:46:45 · 15716 阅读 · 0 评论 -
ASM 系列详细教程-20-ASM Method 方法分析介绍
方法分析本章介绍基于树API的ASM API,用于分析方法代码。首先介绍代码分析算法,然后提供相应的ASM API和一些示例。介绍代码分析是一个非常大的主题,并且存在许多用于分析代码的算法。在这里不可能全部展示它们,这超出了本文的范围。实际上,本部分的目的只是概述ASM中使用的算法。在有关编译器的书中可以找到关于此主题的更好的介绍。下一节将介绍两种重要的代码分析技术,即数据流和控制...原创 2019-12-24 20:45:05 · 17962 阅读 · 0 评论 -
ASM 系列详细教程-19-ASM Tree api 方法组件组成入门详解
成分组成到目前为止,我们只看到了如何创建和转换MethodNode对象,但是还没有看到与类的字节数组表示形式相关的链接。像对于类一样,此链接是通过组合核心API和树API组件来完成的,如本节所述。介绍除了图7.1中所示的字段外,MethodNode类还扩展了MethodVisitor类,并且还提供了两个接受方法,它们将MethodVisitor或ClassVisitor作为参数。acce...原创 2019-12-23 20:30:53 · 14698 阅读 · 0 评论 -
ASM 系列详细教程-18-ASM Tree api 方法接口与组件
方法本章介绍如何使用ASM树API生成和转换方法。它从仅提供树API的介绍开始,并提供一些说明性示例,然后介绍如何与核心API组合。下一章介绍了用于泛型和注解的树形API。Interfaces and components 说明MethodNode用于生成和转换方法的ASM树API基于MethodNode类(请参见图7.1)。Figure 7.1.: The MethodNode ...原创 2019-12-23 20:29:32 · 15210 阅读 · 0 评论 -
ASM 系列详细教程-17-ASM Tree api 类组件组成详解
组件组成到目前为止,我们只看到了如何创建和转换ClassNode对象,但是还没有看到如何从类的字节数组表示形式构造ClassNode,反之亦然,如何从ClassNode构造此字节数组。实际上,这是通过组合核心API和树API组件来完成的,如本节所述。介绍除了图6.1中所示的字段之外,ClassNode类还扩展了ClassVisitor类,并且还提供了一个接受方法,该方法将ClassVisi...原创 2019-12-23 20:28:13 · 15115 阅读 · 0 评论 -
ASM 系列详细教程-16-ASM Tree api 类接口与组件
本章简介本章介绍如何使用ASM树API生成和转换类。它从仅介绍tree API入手,然后进行说明如何与核心API组合在一起。在下一章中将说明用于方法,注解和泛型内容的树形API。Interfaces and componentsPresentation(介绍)类节点信息用于生成和转换已编译Java类的ASM树API基于ClassNode类(请参见图6.1)。Figure 6.1....原创 2019-12-23 20:25:28 · 15113 阅读 · 0 评论 -
ASM 系列详细教程-15-ASM ReflectASM 入门案例详细介绍及实战
reflectasmreflectasm is a very small Java library that provides high performance reflection by using code generation.An access class is generated to set/get fields, call methods, or create a new ins...原创 2019-12-23 20:23:40 · 15600 阅读 · 0 评论 -
ASM 系列详细教程-14-ASM core api 向后兼容守则
守则本节介绍了使用核心ASM API时必须遵循的准则,以确保您的代码在将来的任何ASM版本中均保持有效(按照上述合同的意义)。首先,如果您编写类生成器,则没有任何可遵循的准则。例如,如果您为ASM 4.0编写了一个类生成器,则它可能会包含一个诸如 visitSource(mySource, myDebug) 之类的调用,当然也不会包含对visitLicense的调用。如果使用ASM 5.0...原创 2019-12-23 20:20:53 · 14498 阅读 · 1 评论 -
ASM 系列详细教程-13-ASM core api 向后兼容
向后兼容介绍过去已经以类文件格式引入了新元素,并且将来将继续添加新元素(例如,用于模块化,Java类型的注释等)。直到ASM 3.x,每个此类更改都导致ASM API中向后不兼容的更改,这是不好的。为了解决这些问题,ASM 4.0中引入了一种新的机制。其目标是确保即使将来在类文件格式中引入了新功能时,所有将来的ASM版本都将保持与任何先前版本(直至ASM 4.0)的向后兼容性。这意味着...原创 2019-12-23 20:18:56 · 14520 阅读 · 0 评论 -
ASM 系列详细教程-12-ASM metadata 元数据之调试 debug
Debug使用 javac -g 编译的类包含其源文件的名称,源行号和字节码指令之间的映射以及源代码中的本地变量名称和字节码中的本地变量槽之间的映射。此可选信息在调试器中以及可用时在异常堆栈跟踪中使用。结构体类的源文件名存储在专用的类文件结构部分中(请参见图2.1)。源行号和字节码指令之间的映射存储为方法的已编译代码部分中(行号,标签)对的列表。例如,如果l1,l2和l3是按此顺序出现...原创 2019-12-23 20:16:28 · 15234 阅读 · 0 评论 -
ASM 系列详细教程-11-ASM metadata 元数据之注解 annotation
注解如果类,字段,方法和方法参数注解(例如@Deprecated或@Override)存储在已编译的类中,则它们的保留策略不是RetentionPolicy.SOURCE。该信息在运行时不会由字节码指令使用,但是如果保留策略为RetentionPolicy.RUNTIME,则可以通过反射API进行访问。编译器也可以使用它。结构结构体源代码中的注解可以采用多种形式,例如@ Depreca...原创 2019-12-23 20:15:16 · 15692 阅读 · 0 评论 -
ASM 系列详细教程-10-ASM metadata 元数据之泛型
注解本章说明如何使用核心API生成和转换已编译的Java类元数据,例如注解。每个部分均以一种类型的元数据开始呈现,然后以一些说明性示例呈现相应的ASM接口,组件和工具以生成和转换这些元数据。泛型诸如 List<E> 之类的通用类以及使用它们的类包含有关它们声明或使用的通用类型的信息。字节码指令在运行时不使用此信息,但是可以通过反射API进行访问。编译器还使用它进行单独的编译...原创 2019-12-22 18:45:58 · 14944 阅读 · 0 评论 -
ASM 系列详细教程-09-ASM 方法增强 aop 字节码实战
Method 回顾上面几节谈论了大量的 method 方法,感觉 ASM 提供了很多强大的功能。但是缺少实战有时候就比较没有实感,所以选择一个比较简单的例子进行编码。一点想法基本信息可以基于 asm 获取 class 的基本信息reflect可以学习 ReflectASM 的思想,自己基于 ASM 实现 field/method 等较为高效的调用。aop直接可以对已有的方法进行增...原创 2019-12-22 18:44:25 · 15162 阅读 · 0 评论 -
ASM 系列详细教程-08-ASM 方法工具类
Toolsorg.objectweb.asm.commons 软件包包含一些预定义的方法适配器,这些适配器可用于定义您自己的适配器。本节介绍其中的三个,并说明如何将它们与3.2.4节的AddTimerAdapter示例一起使用。它还显示了如何使用上一章中介绍的工具简化方法的生成或转换。Basic tools2.3 节中介绍的工具也可以用于方法。Type许多字节码指令(例如xLOAD,...原创 2019-12-22 18:42:41 · 15669 阅读 · 0 评论 -
ASM 系列详细教程-07-ASM 方法接口与组件
介绍用于生成和转换已编译方法的ASM API基于MethodVisitor抽象类(请参见图3.4),该类由ClassVisitor的visitMethod方法返回。除了下一章中将介绍的与注释和调试信息有关的一些方法外,此类还基于以下内容为每个字节码指令类别定义了一个方法:这些指令的参数数量和类型(这些类别与3.1.2节中介绍的类别不对应)。必须按以下顺序调用这些方法(在MethodVisi...原创 2019-12-22 18:40:18 · 16318 阅读 · 1 评论 -
ASM 系列详细教程-06-ASM method struct 方法结构
方法本章说明如何使用核心ASM API生成和转换编译方法。它首先介绍了已编译的方法,然后提供了许多说明性示例,介绍了相应的ASM接口,组件以及生成和转换它们的工具。结构体在已编译的类中,方法的代码存储为一系列字节码指令。为了生成和转换类,了解这些指令并理解它们的工作原理至关重要。本节概述了这些指令,这些指令应足以开始对简单的类生成器和转换器进行编码。要获得完整的定义,您应该阅读Jav...原创 2019-12-22 18:37:59 · 14688 阅读 · 0 评论 -
ASM 系列详细教程-05-ASM class 工具类
工具类除了ClassVisitor类以及相关的ClassReader和ClassWriter组件之外,ASM在org.objectweb.asm.util包中还提供了一些工具,这些工具在类生成器或适配器的开发过程中很有用,但不需要 在运行时。ASM还提供了一个实用程序类,用于在运行时处理内部名称,类型描述符和方法描述符。所有这些工具在下面介绍。类型(Type)如您在前几节中所见,ASM ...原创 2019-12-22 18:36:17 · 15012 阅读 · 0 评论 -
ASM 系列详细教程-04-ASM interface and components 接口和组件
接口和组件介绍用于生成和转换已编译类的ASM API基于ClassVisitor抽象类(请参见图2.4)。此类中的每个方法都对应于同名的类文件结构部分(请参见图2.1)。通过单个方法调用可以访问简单部分,该方法的参数描述其内容,并返回void。可以通过返回辅助访问者类的初始方法调用来访问其内容可以具有任意长度和复杂度的节。visitAnnotation,visitField和visit...原创 2019-12-22 18:33:50 · 16482 阅读 · 3 评论 -
ASM 系列详细教程-03-ASM 类文件深入学习
Java 类文件所谓 Java 类文件,就是通常用 javac 编译器产生的 .class 文件。这些文件具有严格定义的格式。为了更好的理解 ASM,首先对 Java 类文件格式作一点简单的介绍。Java 源文件经过 javac 编译器编译之后,将会生成对应的二进制文件(如下图所示)。每个合法的 Java 类文件都具备精确的定义,而正是这种精确的定义,才使得 Java 虚拟机得以正确读...原创 2019-12-22 18:30:23 · 16796 阅读 · 2 评论 -
ASM 系列详细教程-02-ASM 整体概览
动机程序分析,生成和转换是有用的技术,可以在许多情况下使用:程序分析范围从简单的语法分析到完整的语义分析,可用于查找应用程序中的潜在错误,检测未使用的代码,反向工程代码等。在编译器中使用程序生成。其中包括传统的编译器,还有用于分布式编程的存根或骨架编译器,即时编译器等程序转换可用于优化或混淆程序,将调试或性能监控代码插入应用程序,用于面向方面的编程等所有这些技术都可以用于任何编程语...原创 2019-12-22 18:25:27 · 19726 阅读 · 0 评论 -
ASM 系列详细教程-01-ASM 入门案例详细教程
ASMASM 是一个通用的Java字节码操作和分析框架。它可以用来修改现有的类或动态地生成类,直接以二进制形式。ASM提供了一些通用的字节码转换和分析算法,可以从这些算法中构建自定义复杂的转换和代码分析工具。ASM提供与其他Java字节码框架类似的功能,但主要关注性能。因为它的设计和实现都尽可能地小和快,所以非常适合在动态系统中使用(当然也可以以静态的方式使用,例如在编译器中)。特性...原创 2019-12-22 18:22:52 · 23973 阅读 · 5 评论 -
java 反射 借助 asm 获取参数名称最优雅简单的方式
背景说明最近写反射相关的代码,想获取对应的参数名称,却发现没有特别好的方式。jdk7 及其以前,是无法通过反射获取参数名称的。jdk8 可以获取,但是要求指定 -parameter 启动参数,限制较多。期间尝试过类似于 Mybatis 使用 @Param 的方式,但是感觉不够优雅,后来发现了下面的这个工具。asm-tool 是基于 asm 构建的常见工具类。下面简单介绍下使用方式。快...原创 2019-12-13 17:25:16 · 14936 阅读 · 0 评论