Asmtools工具修改Java字节码,并了解boolean类型在虚拟机中的表示方法
在学习极客时间——《深入拆解JVM虚拟机》专栏中,有用到asmtools这样一个工具,用以修改class文件。
一.获取工具
获取工具方法:
自己构建asmtools.jar:https://www.cnblogs.com/yelongsan/p/9674723.html
直接下载asmtools.jar:https://yun.515code.com/file/asmtools.jar
另外,下载 JD-GUI ,它是".class"文件的反编译工具。
拿到jar包后,我们进入命令行即可。
二.测试
1.生成一个java文件,名字为 Foo.java

2.编译并执行

3.将class文件转换为jasm文件

我们都知道,boolean类型为true时在虚拟机用1代替(boolValue在虚拟机中值为1)
接下来,将第一个 iconst_1 改为 iconst_2( 相当于把boolValue值改为2 )
4.将jasm文件转换为class文件
java -jar asmtools.jar jasm Foo.jasm
5.使用 JD-GUI 打开 Foo.class(内容如下)

再次执行:

三.总结
1. 学会使用asmtools工具修改class文件:
由 class 文件生成 jasm 文件:
java -jar asmtools.jar jdis Foo.class > Foo.jasm
由 jasm 文件生成 class 文件:
java -jar asmtools.jar jasm Foo.jasm

文章作者: 扎克蕉
文章链接: https://www.515code.com/posts/g3f7b5h7/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 515code-实验室。