ASM is an open-source java library for manipulating bytecode.
Note that the scope of the ASM library is strictly limited to reading, writing, transforming and analyzing classes. In particular the class loading process is out of scope.

系列一:Core API 篇

第一章 基础

快速开始 简单介绍 如何写代码 设计模式
  1. ASM 介绍
  2. ASM 的组成部分
  3. ASM 与 ClassFile
  4. ClassFile 快速参考
  1. 如何编写 ASM 代码(Core API)
  2. 如何编写 ASM 代码(Tree API)
  1. 访问者模式

第二章 生成新的类

API 重要概念 示例
  1. ClassVisitor 介绍
  2. ClassWriter 介绍
  3. FieldVisitor 介绍
  4. FieldWriter 介绍
  5. MethodVisitor 介绍
  6. MethodWriter 介绍
  7. Label 介绍
  8. Opcodes 介绍
  1. 方法的初始 Frame
  2. frame 介绍
  3. 本章内容总结
  1. ClassWriter 代码示例
  2. MethodVisitor 代码示例
  3. Label 代码示例

第三章 转换已有的类

API 示例
  1. ClassReader 介绍
  2. Class Transformation 的原理
  3. Type 介绍
  4. 本章内容总结
  1. ClassReader 代码示例
  2. 修改已有的方法(添加-进入和退出)
  3. 修改已有的方法(添加-进入和退出-打印方法参数和返回值)
  4. 修改已有的方法(添加-进入和退出-方法计时)
  5. 修改已有的方法(删除-移除 Instruction)
  6. 修改已有的方法(删除-清空方法体)
  7. 修改已有的方法(修改-替换方法调用)
  8. 查找已有的方法(查找-方法调用)
  9. 修改已有的方法(优化-删除-复杂的变换)

第四章 工具类和常用类

Basic asm-util asm-commons
  1. asm-util 和 asm-commons
  1. CheckClassAdapter 介绍
  2. TraceClassVisitor 介绍
  3. Printer/ASMifier/Textifier 介绍
  1. AdviceAdapter 介绍
  2. GeneratorAdapter 介绍
  3. LocalVariablesSorter 介绍
  4. AnalyzerAdapter 介绍
  5. InstructionAdapter 介绍
  6. ClassRemapper 介绍
  7. StaticInitMerger 介绍
  8. SerialVersionUIDAdder 介绍

系列二:专题篇

注解

Basic

泛型

Basic

属性

Basic

指令

JVM OPCODE
  1. 课程研究主题
  2. ClassFile 和 Instruction
  3. ASM 的 MethodVisitor 类
  4. JVM Architecture
  5. JVM Execution Model
  1. opcode: return (6/6/205)
  2. opcode: constant (20/26/205)
  3. opcode: transfer values (50/76/205)
  4. opcode: math (52/128/205)
  5. opcode: object (3/131/205)
  6. opcode: field (4/135/205)
  7. opcode: method (5/140/205)
  8. opcode: array (20/160/205)
  9. opcode: jump (25/185/205)
  10. opcode: stack (9/194/205)
  11. opcode: wide (1/195/205)
  12. opcode: exception (1/196/205)
  13. opcode: monitor (2/198/205)
  14. opcode: unused (7/205/205)

难点解析

Basic
  1. 调用方法
  2. 创建对象
  3. Exception 处理
  4. Java 8 Lambda
  5. Code Trick

系列三:Tree API 篇

第一章 基础

Basic
  1. Tree API介绍
  2. Core API VS. Tree API

第二章 生成新的类

Basic
  1. ClassNode介绍
  2. FieldNode介绍
  3. MethodNode介绍
  4. InsnList介绍
  5. AbstractInsnNode介绍
  6. if和switch示例
  7. TryCatchBlockNode介绍

第三章 转换已有的类

Basic
  1. Tree Based Class Transformation
  2. Tree Based Class Transformation示例
  3. Tree Based Method Transformation
  4. Tree Based Method Transformation示例
  5. 混合使用Core API和Tree API进行类转换

第四章 方法分析

Basic BasicValue SourceValue Other
  1. Method Analysis
  2. Frame/Interpreter/Value
  3. Analyzer
  1. BasicValue-BasicInterpreter
  2. BasicInterpreter示例:移除Dead Code
  3. BasicVerifier
  4. SimpleVerifier
  5. SimpleVerifier示例:移除checkcast
  6. SimpleVerifier示例:冗余变量分析
  1. SourceInterpreter
  2. SourceInterpreter示例:反编译-方法参数
  3. SourceInterpreter示例:查找相关的指令
  1. Interpreter和Value的精妙之处
  2. 示例:检测潜在的NullPointerException
  3. 生成Control Flow Graph
  4. 示例:Cyclomatic Complexity
  5. Method Analysis Examples

系列四:代码模板

类层面

Basic
  1. 字段:添加
  2. 字段:删除
  3. 方法:添加
  4. 方法:删除
  5. 接口:添加

方法层面

Basic
  1. Try-Catch:使用相同的代码处理逻辑
  2. Try-Catch:为整个方法添加try-catch
  3. Annotation:查找带有注解的方法

其它

Basic
  1. ByteArrayClassLoader
  2. Swap Two Numbers Without Using Third Variable
  3. Superpackage attribute
  4. Class Dependencies
  5. this overwritten
  6. ClassWriter.getCommonSuperClass()

文章

文章列表:

资源

视频

视频列表:

Website Core API(90个视频) OPCODE(41个视频) Tree API(52个视频)
51CTO Core API OPCODE Tree API
Bilibili All In One = Core API + OPCODE + Tree API    
Youtube Core API OPCODE Tree API

需要注意的一点,在B站当中,Java ASM 的系列一、二、三的视频放到了一个视频列表里:

  • 编号为 001~090 的视频属于系列一
  • 编号为 101~141 的视频属于系列二
  • 编号为 201~252 的视频属于系列三

代码

代码仓库:

网盘下载

JavaASM系列(百度网盘)

JavaASM系列(阿里云盘)

参考资料

ASM相关:

Oracle相关文档:

常用的字节码类库:

使用字节码进行代码分析:

Java字节码交流群:

QQ Group