文章目录
  1. 1. AsmTools 是什么
    1. 1.1. 其他操作字节码的工具
  2. 2. 为什么不用编译完成的产物
  3. 3. 如何从源码进行编译
    1. 3.1. 获取源码
    2. 3.2. 准备编译工具
    3. 3.3. 执行编译命令
  4. 4. AsmTools的使用方法
    1. 4.1. 反汇编(由class文件生成JASM格式文件)
    2. 4.2. 汇编(JASM -> class)
  5. 5. References

AsmTools 是什么

AsmTools 是OpenJDK CodeTools项目中提供修改JVM字节码的工具。

其他操作字节码的工具

  • bytebuddy
    基于ASM构建在运行时创建Class文件而不需要编译器帮助的字节码操作类库

为什么不用编译完成的产物

官网上如果提供可用的编译完成产物,直接下载使用即可,但是目前提供的Downloads - Release是一个404状态的状态链接,所以可行的方案就是将源码下载后进行编译。

如何从源码进行编译

获取源码

hg clone http://hg.openjdk.java.net/code-tools/asmtools

准备编译工具

编译前需要准备好两个工具:

  • JDK 8.0+
  • Ant 1.8+

这里JDK的安装就不再赘述,Ant的安装在macOS上可以选择使用brew或者macport包管理工具安装:
使用brew安装:
brew update & brew install ant

执行编译命令

cd /path/to/asmtools/build
ant build

默认会在 /path/to/asmtools路径的平行路径下生成asmtools的编译结果,以当前AsmTools7.0版本为例,生成的文件夹名为asmtools-7.0-build 其中asmtools-7.0-build/release/lib/asmtools.jar就是我们希望得到的AsmTools lib类库。

AsmTools的使用方法

反汇编(由class文件生成JASM格式文件)

AsmTools 关键类org.openjdk.asmtools.jdis.Main

命令使用方法:

$ java -cp asmtools.jar org.openjdk.asmtools.jdis.Main [options] filename.clas

汇编(JASM -> class)

ASMTools 关键类org.openjdk.asmtools.jasm.Main

命令使用方法:

$ java -cp asmtools.jar org.openjdk.asmtools.jasm.Main [options] filename.jasm

其实AsmTools除了支持JASM格式的文件之外还支持JCOD格式,详情请参照Jasm vs. Jcod

更多AsmTools的用法请参照Tool Usage

References

文章目录
  1. 1. AsmTools 是什么
    1. 1.1. 其他操作字节码的工具
  2. 2. 为什么不用编译完成的产物
  3. 3. 如何从源码进行编译
    1. 3.1. 获取源码
    2. 3.2. 准备编译工具
    3. 3.3. 执行编译命令
  4. 4. AsmTools的使用方法
    1. 4.1. 反汇编(由class文件生成JASM格式文件)
    2. 4.2. 汇编(JASM -> class)
  5. 5. References