sc(Search Class)
这个命令能搜索出所有已经加载到JVM中的Class信息。
sc默认开启了子类匹配功能,所有当前类的子类也会被搜索出来,想要精确的匹配,将options disable-sub-class true开启
参数说明
class-pattern: 类名表达式匹配,支持全限定名,如com.taobao.test.AAA, 也支持com/taobao/test/AAA这样的格式。
method-pattern: 方法名表达式匹配
-d: 输出类的详细信息
-E: 开启正则表达式匹配
-f:输出当前类的成员变量信息,需要配合-d一起使用
例:
输出MathGame类的详细信息,成员变量信息也一并输出
sc MathGame -d -f
sm(Search Method)
查看已加载类的方法信息,只能看到当前类所声明的方法,无法看到父类的。
参数说明:
class-pattern: 类名匹配表达式
method-pattern: 方法名匹配表达式
-d: 展示每个方法的详细信息
-E: 开启正则表达式匹配,默认为通配符匹配
例:
sm -d java.lang.String
jad
jad命令将JVM中运行的字节码反编译成java代码。
参数说明:
class-pattern: 类名表达式匹配
-E: 开启正则表达式匹配,默认为通配符匹配
--source-only: 只显示源码,可以结合mc/redefine命令一起使用
例:
反编译String类下的trim()方法
jad java.lang.String trim
mc
把源代码编译成字节码
将/root/HelloWorld.java编译HelloWorld.class,并保存到内存中
mc /root/HelloWorld.java
可以通过-d命令指定输出目录
mc -d /root/bbb /root/HelloWorld.java
redefine
把新生成的字节码文件在内存中执行
可以通过jad+mc+redefine命令,直接修改源代码并执行
1.使用jad反编译MathGame,输出到/root/MathGame.java中
jad --source-only demo.MathGame > /root/MathGame.java
2.对源代码进行修改,然后使用mc将修改后的代码编译到/root/MathGame.class
mc /root/MathGame.java -d /root
3.使用redefine命令重新加载新的字节码
redefine /root/demo/MathGame.class
dump
将已加载类的字节码文件保存到特定目录,默认保存路径:logs/arthas/classdump
选项说明:
-E: 开启正则表达式匹配
把String类的字节码文件保存到~/logs/arthas/classdump目录下
dump java.lang.String
把demo包下所有类的字节码文件保存到~/logs/arthas/classdump/目录下
dump demo.*
classloader
获取类加载器的信息
- 1.显示所有类加载器的信息
- 2.获取某个类加载器所在的jar包
- 3.获取某个资源在哪个jar包
- 4.加载某个类
基本用法:
classloader
参数说明:
-l: 按类加载实例进行统计
-t: 打印所有ClassLoader的继承树
-a: 列出所有ClassLoader加载的类,谨慎使用
-c: 先通过classloader -l获取类加载器的hashcode,然后再使用classloader -c hashcode,找到类加载器所在的jar包
-r: 获取资源在哪个jar包,例如 calssloader -r java/lang/String.class
-load: 使用类加载器加载指定的类到方法区中,例如,classloader -load java.lang.String
image.png
网友评论