文章字数:737,阅读全文大约需要2分钟
一、jdk自带的javap
工具
avap是JDK提供的一个命令行工具,javap能对给定的class文件提供的字节代码进行反编译。相对于
jd
,javap
能够查看java编译器为我们生成的字节码,有利于程序调优。
使用方式:(命令行状态下)
1 | javap <选项> <类名> |
部分常用命令(1.8)
1 | -l 打印行和本地变量表 |
Fernflower.jar
批量反编译java字节码,idea使用的就是这种方法。、
使用
- 首先把工程的所有class 压缩成zip
- 执行命令
1
2# 二、java -jar fernflower.jar <目标>.jar <文件夹名>/
java -jar fernflower.jar classes.zip demo/
三、java.lang.instrument.Instrumentation
java Instrumentation指的是可以用独立于应用程序之外的代理(agent)程序来监测和协助运行在JVM上的应用程序。这种监测和协助包括但不限于获取JVM运行时状态,替换和修改类定义等。
能够使加载的类与物理保存的.class文件不同,热部署的实现支持之一。常用于累的监控。
就是使用代理类,类加载前会执行代理类的指定方法处理字节码。
四、三种工具和asm的关系
- asm是用来解析,保存,修改,创建二进制class文件的工具
javap
和Fernflower.jar
是反编译java class文件的工具,只是各有特点。Instrumentation
可以代理类,在加载前使用asm修改类。(JavaAgent java探针、代理)的实现Instrumentation
可以编写代码使用javaagent代理执行其它java文件,在代码里使用上面的asm库动态修改代码。也可以直接将所有字节保存,并加载其它class文件。