ASM学习
来学习一下java的ASM,和class字节码以及一些简单的jvm知识也记录在这,参考文章:https://lsieun.github.io/java/asm/java-asm-season-01.html,https://www.javabetter.cn/jvm/class-file-jiegou.html
因为后面java反序列化的学习还需要动态生成恶意字节码,所以来补补基础。
Java类文件结构
ASM介绍
ASM就是一个操作java字节码的类库。
ASM的操作对象字节码数据,就是.java文件经过javac之后生成的.class文件。
ASM处理字节码的步骤就是:拆分->修改->合并
- 第一步,将
.class
文件拆分成多个部分; - 第二步,对某一个部分的信息进行修改;
- 第三步,将多个部分重新组织成一个新的
.class
文件。
版本问题
不同的ASM版本对应不同的Java版本,高版本可以兼容低版本
ASM Release | Release Date | Java Support |
---|---|---|
2.0 | 2005-05-17 | Java 5 language support |
3.2 | 2009-06-11 | support for the new invokedynamic code. |
4.0 | 2011-10-29 | Java 7 language support |
5.0 | 2014-03-16 | Java 8 language support |
6.0 | 2017-09-23 | Java 9 language support |
6.1 | 2018-03-11 | Java 10 language support |
7.0 | 2018-10-27 | Java 11 language support |
7.1 | 2019-03-03 | Java 13 language support |
8.0 | 2020-03-28 | Java 14 language support |
9.0 | 2020-09-22 | Java 16 language support |
9.1 | 2021-02-06 | JDK 17 support |
9.2 | 2021-06-26 | JDK 18 support |
9.3 | 2022-04-04 | |
9.4 | 2022-10-02 | |
9.5 | 2023-03-24 |
ASM能做的事
- 父类:修改成一个新的父类
- 接口:添加一个新的接口、删除已有的接口
- 字段:添加一个新的字段、删除已有的字段
- 方法:添加一个新的方法、删除已有的方法、修改已有的方法
- …等等
ASM生成新的类
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 clown!