Java反汇编
一、环境准备
- Windows 10 ,
64位
- IDEA 2021.3.3
- JDK
17
java version “17.0.4.1” 2022-08-18 LTS
Java™ SE Runtime Environment (build 17.0.4.1+1-LTS-2)
Java HotSpot™64-Bit Server
VM (build 17.0.4.1+1-LTS-2, mixed mode, sharing)
二、HSDIS
准备HSDIS插件
Windows 10 ,64位
对应插件: hsdis-amd64.dll
其他系统对应插件,请自行查找
准备好插件,将插件放入对应目录文件夹下
JDK
17
对应目录
C:\Program Files\Java\jdk-17.0.4.1\bin\server
具体的JDK安装目录,以
自己的安装目录
为准,主要是要放在jdk 17
下的bin\server目录下
即.\Java\jdk-17.0.4.1\bin\server
其他版本的 jdk 放置目录请自行查询
反汇编
-
完成以上准备工作,即可进行 JAVA 反汇编。
-
以下反汇编演示,都是在 IDEA 2021.3.3 环境下进行。不同的IDE,请以自己熟练使用的IDE为准。
准备测试代码
- 以经典的 双重检查单例 代码为例,为后续的 volatile 关键字探索提前准备反汇编文件。
public class SingletonWithVolatile {
private volatile static SingletonWithVolatile instance;
public static SingletonWithVolatile getInstance() {
if (instance == null) {
synchronized (SingletonWithVolatile.class) {
if (instance == null) {
instance = new SingletonWithVolatile();
}
}
}
return instance;
}
public static void main(String[] args) {
SingletonWithVolatile.getInstance();
}
}
设置 VM options
添加 VM options
输入框
输入配置命令
- -Xcomp
-XX:+UnlockDiagnosticVMOptions
-XX:+PrintAssembly
-XX:+LogCompilation
-XX:LogFile=jit.log
-Xcomp : 让JVM以编译模式执行代码,JVM在首次运行时,就会将所有字节码编译为本地代码
-XX:+UnlockDiagnosticVMOptions : 解锁诊断功能
-XX:+PrintAssembly : 输出反汇编后的汇编指令
-XX:+LogCompilation:输出反汇编日志
-XX:LogFile=jit.log:反汇编日志保存路径及名称
- 完成以上操作,点击RUN按钮,就会开始反汇编。
- 同时控制台会输出相应内容,对应路径下也会生成反汇编日志文件。
- 该日志文件用于后续的 JITwatch 可视化软件。
- 反汇编完成,控制台输出截图如下
三、JITwatch
准备 软件:JITwatch
此处使用的版本:jitwatch-ui-1.4.7-shaded-win.jar
初体验
完成以上准备操作,运行
JITwatch 预置了一个文件,点击沙盒sandbox
,可自行探索体验
执行本地文件
关闭初体验窗口,
清空
初体验文件
创建
新的配置
设置
环境
选择
log文件
RUN
结束
至此,已经成功完成了反汇编
,成功完成图形化界面
的初体验。
利刃出鞘,方可探索JVM奥秘。
加油,少年!