反编译
程序员文章站
2023-12-25 12:28:39
...
反编译
前言
如果不了解虚拟机栈,可以参考Java 内存区域
编译指令
javac Hello.java
反编译指令
javap -c Hello.class > Hello.txt
-
-c
:指定文件名 -
>
:把反编译的内容输出
示例
源代码
public class Hello {
public static void main(String[] args) {
int i = 1;
i = i++;
int j = i++;
int k = i + ++i * i++;
}
}
反编译内容
Code:
// int i = 1;
0: iconst_1 // 将整数1推到栈顶
1: istore_1 // 将栈顶的数值存入局部变量1(索引为1的变量槽)
2: iload_1 // 将局部变量1的值加载到栈顶
// i = i++;
3: iinc 1, 1 // 整数1和局部变量1的值相加
6: istore_1 // 将栈顶的数值存入局部变量1
// int j = i++;
7: iload_1
8: iinc 1, 1
11: istore_2 // 将栈顶的数值存入局部变量2
// int k = i + ++i * i++;
12: iload_1
13: iinc 1, 1
16: iload_1
17: iload_1
18: iinc 1, 1
21: imul
22: iadd
23: istore_3
24: return