asmtools是openjdk提供的java字节码汇编及反汇编工具,学习JVM时需要的工具,下面是这个工具的安装及使用过程
一、环境
系统-Ubuntu 16.04.4
JDK version 8.0
Ant version 1.8 or later
参考文档 https://wiki.openjdk.java.net/display/CodeTools/How+to+build+AsmTools
image.png
#安装包位置
cd /usr/local
#解压
tar -zxvf apache-ant-1.9.14-bin.tar.gz
#配置环境变量
vim /etc/profile
#添加如下地址
export PATH=/usr/local/apache-ant-1.9.14/bin:$PATH
#保存退出刷新配置
:wq
source /etc/profile
#执行ant命令看是否
ant
三、asmtools工具下载
#安装hg工具
apt install mercurial
#拉去asmtools工具
hg clone http://hg.openjdk.java.net/code-tools/asmtools
#构建asmtools.jar
cd /asmtools/build
ant
#此时asmtools根目录出现asmtools-7.0-build文件夹
四、使用asmtools修改java字节码
#创建Foo.java文件
echo '
public class Foo {
public static void main () {
boolean flag = true;
if(flag) System.out.println("Hello,Java!");
if(flag == true) System.out.println("Hello,JVM!");
}
}' > Foo.java
#编译Foo.java 编译后的Foo.class 要放在classpath环境变量路径下
javac Foo.java
#执行Foo.class
java Foo
#使用asmtools修改字节码
java -jar /home/yaozun/asmtools-7.0-build/release/lib/asmtools.jar jdis Foo.class > Foo.jasm.1
awk 'NR==1,/iconst_1/{sub(/iconst_1/, "iconst_2")} 1' Foo.jasm.1 > Foo.jasm
java -jar /home/yaozun/asmtools-7.0-build/release/lib/asmtools.jar jasm Foo.jasm
两次执行结果如图所示
image.png
image.png