解析 java Class文件


参考链接: Java字节码
参考链接: 一文看懂Java字节码

1.编写 编译 与 运行

public class Person{
	public static void main(String[] args){
		System.out.println("Hello World!");
	}
}

cmd中将源代码编译成字节码文件

javac Person.java

cmd中运行字节码文件

在这里插入图片描述

2. 打开字节码文件

推荐工具:sublime text3

sublime 编辑器可以反编译我们的字节码文件,记事本打开为乱码

Person.class 文件打开后,我们可以看到一堆十六进制的字节

cafe babe 0000 0034 001d 0a00 0600 0f09
0010 0011 0800 120a 0013 0014 0700 1507
0016 0100 063c 696e 6974 3e01 0003 2829
5601 0004 436f 6465 0100 0f4c 696e 654e
756d 6265 7254 6162 6c65 0100 046d 6169
6e01 0016 285b 4c6a 6176 612f 6c61 6e67
2f53 7472 696e 673b 2956 0100 0a53 6f75
7263 6546 696c 6501 000b 5065 7273 6f6e
2e6a 6176 610c 0007 0008 0700 170c 0018
0019 0100 0c48 656c 6c6f 2057 6f72 6c64
2107 001a 0c00 1b00 1c01 0006 5065 7273
6f6e 0100 106a 6176 612f 6c61 6e67 2f4f
626a 6563 7401 0010 6a61 7661 2f6c 616e
672f 5379 7374 656d 0100 036f 7574 0100
154c 6a61 7661 2f69 6f2f 5072 696e 7453
7472 6561 6d3b 0100 136a 6176 612f 696f
2f50 7269 6e74 5374 7265 616d 0100 0770
7269 6e74 6c6e 0100 1528 4c6a 6176 612f
6c61 6e67 2f53 7472 696e 673b 2956 0021
0005 0006 0000 0000 0002 0001 0007 0008
0001 0009 0000 001d 0001 0001 0000 0005
2ab7 0001 b100 0000 0100 0a00 0000 0600
0100 0000 0100 0900 0b00 0c00 0100 0900
0000 2500 0200 0100 0000 09b2 0002 1203
b600 04b1 0000 0001 000a 0000 000a 0002
0000 0003 0008 0004 0001 000d 0000 0002
000e 

3. 解析字节码文件

java字节码的总览图
在这里插入图片描述
可以参考:Oracle 官方的 javac 命令说明
可以了解javac -target 如何运行其他版本的Java

笨方法: 通过调整环境变量的位置,让使用的java版本在上面

常量池的项目类型表:
在这里插入图片描述
从JDK7开始,新增以下三种类型

新增3种类型
CONSTANT_MethodHandle_info
CONSTANT_MethodType_info
CONSTANT_InvokeDynamic_info
posted @ 2022-10-16 01:07  辰梦starDream  阅读(11)  评论(0编辑  收藏  举报  来源