[Java] 借助 GUI 展示 class 文件的内容(V1.0版本)

文章来源声明: 原文作者:金銀銅鐵; 来源站点:掘金; 原文链接:https://juejin.cn/post/7697180584537833514; 本文基于上述来源整理/加工,觅优补充点评,仅供技术学习交流。版权归原作者所有。
觅优短评

为 class 文件解析工具补上 Swing 界面,降低查看字节码结构的门槛,适合 Java 学习者、字节码调试与教学演示;功能尚在完善,宜作辅助工具使用。

背景 --

之前我花了不少时间写了一个 简易的 class 文件解析工具(它的部分功能还没有完成)。这个工具没有 GUI,考虑到现在 AI 编程非常方便,可以让 trae 帮忙完成 Swing 的部分,从而让这个工具支持 GUI。本文会展示这个工具(GUI 版本)的基本用法。

正文

下载源代码

直接下载

从 简易的 class 文件解析工具 页面可以将源代码下载下来。

image.png

通过执行 git 命令下载

您通过执行以下命令也可以下载源代码

git clone https://github.com/fanofxiaofeng/naive-class-file-parser.git

运行 GUI 版本

切换分支

下载完成后,通过执行以下命令,就可以将代码切换到 feature_gui 分支。

git checkout feature_gui

启动

在项目顶层执行如下命令,就可以运行 GUI 版本

mvn compile exec:java -Pgui

启动后的效果如下图所示

image.png

选择一个 class 文件后,就可以对其进行解析。

核心功能

概览(Overview)部分

Overview 部分的示例效果如下图所示 ⬇️

image.png

在 Overview 部分,可以看到以下内容

字段我是否已经对其进行简单的验证
`magic`✅
`minor_version`✅
`major_version`✅
`access_flags`✅
`this_class`✅
`super_class`✅
`interfaces`❌
`constant_pool_count`❌
`fields_count`❌
`methods_count`❌
`attributes_count`❌

常量池(Constant Pool)部分

在 Constant Pool 部分,可以常量池中的各项。如果双击某一行,可以看到这一项所引用的 slot(如有)。

image.png

常量池涉及很多种类型,目前我的验证情况列举如下 ⬇️

Tag常量类型我是否已经对其进行简单的验证
1`CONSTANT_Utf8`✅
3`CONSTANT_Integer`✅
4`CONSTANT_Float`✅
5`CONSTANT_Long`✅
6`CONSTANT_Double`✅
7`CONSTANT_Class`✅
8`CONSTANT_String`✅
9`CONSTANT_Fieldref`❌
10`CONSTANT_Methodref`❌
11`CONSTANT_InterfaceMethodref`❌
12`CONSTANT_NameAndType`❌
15`CONSTANT_MethodHandle`❌
16`CONSTANT_MethodType`❌
17`CONSTANT_Dynamic`❌
18`CONSTANT_InvokeDynamic`❌
19`CONSTANT_Module`❌
20`CONSTANT_Package`❌

字段表(Fields)部分

字段表的示例效果如下,其内容还有待完善

image.png

方法表(Methods)部分

方法表的示例效果如下,其内容还有待完善

image.png

属性表(Attributes)部分

属性表的示例效果如下,其内容还有待完善

image.png

参考资料

简易的 class 文件解析工具