V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
liubsyy
V2EX  ›  分享创造

新写的 Java 字节码修改器插件: VisualClassBytes

  •  
  •   liubsyy · 3 天前 · 986 次点击

    市面上的 Java 字节码工具虽然不少,但是都不够完善,要么只支持查看,要么只有部分功能,还有的工具多年不更新了,传统且稳定的修改 class 的方式还是反编译再修改再编译,但是有时我们需要直接修改字节码还需要用字节码库,比如 ASM 和 javassist 等。

    而最流行的字节码库 ASM 却没有官方的编辑器,于是我花了 3 周空闲时间写了一款 IDEA 插件: VisualClassBytes ,功能相对完善,可以直接修改字节码。

    介绍

    首先在插件市场安装 VisualClassBytes

    然后在 class 文件( jar 内 class 亦可)上 右键->VisualClassBytes 可打开字节码编辑器

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

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

    源码地址: https://github.com/Liubsyy/VisualClassBytes

    欢迎交流!

    6 条回复    2024-11-15 19:54:17 +08:00
    cpstar
        1
    cpstar  
       3 天前
    支持一下,曾经几个工具配合,最后用 hex 编辑器修改指令
    liubsyy
        2
    liubsyy  
    OP
       3 天前
    @cpstar 我们大家一起不断维护不断优化,打造一款比较全面的字节码编辑器吧!
    leon0903
        3
    leon0903  
       2 天前
    大佬 我提个建议 能不能搞一个 idea 插件 可以自定义 idea 中方法返回内容, 实现 mock 效果
    liubsyy
        4
    liubsyy  
    OP
       2 天前
    @leon0903 是想直接修改 class 文件的某个方法的返回值吗?这个用 javassist 或者 bytebuddy 很合适
    jiuzhougege
        5
    jiuzhougege  
       2 天前
    如果字节码片段能增加显示行号就行号就好了, 如果右侧能同步对应显示源码就更完美了
    liubsyy
        6
    liubsyy  
    OP
       2 天前
    @jiuzhougege 字节码行号处的 L 标签鼠标悬停会显示源码的行号,右侧显示源码这个倒是可以考虑
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   955 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 19ms · UTC 19:26 · PVG 03:26 · LAX 11:26 · JFK 14:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.