arthas-boot.jar
或者as.sh
的版本: xxx- Arthas 版本: 3.5.3
- 操作系统版本: Win10
- 目标进程的JVM版本: Java(TM) SE Runtime Environment (build 1.8.0_111-b14)
- 执行
arthas-boot
的版本: 3.5.3
- 先跑一个简单的java代码
package com;
import java.util.concurrent.TimeUnit;
public class Test {
public static void main(String[] args) {
Test a = new Test();
while (true) {
a.abc();
try {
TimeUnit.SECONDS.sleep(2);
} catch (Exception e) {
}
}
}
public void abc() {
System.out.println("abc");
}
}
运行,会每隔一秒打印"abc"
2.然后在abc方法体里多加一行的代码
```java
public void abc() {
System.out.println("abc");
System.out.println("dddd"); // 新增加的
}
- 使用retransform修改字节码 retransform Test.class
- 发现每隔一秒会打印 "abc"和"dddd"
- 使用jad命令也能看到被修改的代码
- 使用stop命令退出来
- 重新使用java -jar arthas-boot.jar登上去
- 直接使用jad命令再次查看代码
第8步应该还是修改过的代码
实际运行的结果实际结果是代码被还原。最终打印的是abc 按照文档的说法是 retransform + jad是不会还原字节码的。但是目前按照我上面的步骤。就必现 也就是如果是第一次java -jar arthas-boot.jar登录上去,然后用retransform修改字节码,再马上用jad去看的话。不会被还原。一旦用stop命令退出后,再次登上去,这时候如果用jad去看就会被还原