欢迎光临散文网 会员登陆 & 注册

Asmtools工具修改Java字节码,并了解boolean类型在虚拟机中的表示方法

2020-08-04 18:49 作者:扎克蕉  | 我要投稿

说明:

在学习极客时间——《深入拆解JVM虚拟机》专栏中,有用到asmtools这样一个工具,用以修改class文件。

一.获取工具

获取工具方法:

  1. 自己构建asmtools.jar:https://www.cnblogs.com/yelongsan/p/9674723.html

  2. 直接下载asmtools.jar:https://yun.515code.com/file/asmtools.jar

另外,下载 JD-GUI ,它是".class"文件的反编译工具。

拿到jar包后,我们进入命令行即可。

二.测试

1.生成一个java文件,名字为 Foo.java

echo命令生成Foo.java

2.编译并执行

编译与执行Java文件

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

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(内容如下)

Foo.class 文件内容

再次执行:

命令行执行 java Foo

三.总结

1. 学会使用asmtools工具修改class文件:

  • 由 class 文件生成 jasm 文件:java -jar asmtools.jar jdis Foo.class > Foo.jasm

  • 由 jasm 文件生成 class 文件:java -jar asmtools.jar jasm Foo.jasm

2. 使用JD-GUI可以反编译class文件

3. 通过上面简单的小例子,证实了boolean类型在虚拟机中值为0或1,有趣的是 if (boolValue) 会被翻译成 if (b != 0)


文章作者: 扎克蕉

文章链接: https://www.515code.com/posts/g3f7b5h7/

版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 515code-实验室。


Asmtools工具修改Java字节码,并了解boolean类型在虚拟机中的表示方法的评论 (共 条)

分享到微博请遵守国家法律