背景

市面上的Java字节码工具虽然不少,但是都不够完善,要么只支持查看,要么只有部分功能,还有的工具多年不更新了,传统且稳定的修改class的方式还是反编译再修改再编译,但是有时我们需要直接修改字节码还需要用字节码库,比如ASM和javassist等。
而最流行的字节码库ASM却没有官方的编辑器,于是我花了3周空闲时间写了一款IDEA插件: VisualClassBytes,功能相对完善,可以直接修改字节码。

功能介绍

首先在插件市场安装VisualClassBytes
然后在class文件(jar内class亦可)上右键->VisualClassBytes

openvcb.png

即可打开class字节码编辑器页面。

vcb_main.png

左侧的Class Info节点,Interface节点,Inner Class节点和Field节点,可以修改其访问权限,名称和描述符等信息,修改完后点击左侧下角的保存按钮可保存class到磁盘生效。

edit_info.png

选择Method节点,可看到右侧有Code区、LocalVariable区、Exception区和LineNumber区,可分别修改字节码指令,本地变量表、异常表和行号表。

edit_method.png

Code区可以直接编辑字节码指令,有语法高亮和代码提示补全。
Code区的行号处有L0-Ln标签,右键可修改和添加L标签位置。

line.png

同样修改完后点击左侧下角的保存。
点击左侧的Constant Pool节点,可打开常量池并进行修改。

const_pool.png

修改完后点击右侧的保存按钮,可保存常量池。
使用本插件需要有一定的字节码功底,如果你熟悉字节码,那本插件几乎就是为你量身定做的!
即使你没有编辑字节码需求,在分析代码底层原理和优化的时候,也可以将本插件作为一个字节码浏览工具使用。

总结

本插件VisualClassBytes可修改class字节码,包括class信息、字段信息、内部类,常量池和方法等,感兴趣的朋友可以去试试。
源码地址:https://github.com/Liubsyy/VisualClassBytes


鹰影
1 声望1 粉丝

工程师一枚,热衷于技术