sc(Search Class)
這個命令能搜索出所有已經(jīng)加載到JVM中的Class信息。
sc默認開啟了子類匹配功能,所有當前類的子類也會被搜索出來,想要精確的匹配,將options disable-sub-class true開啟
參數(shù)說明
class-pattern: 類名表達式匹配,支持全限定名,如com.taobao.test.AAA, 也支持com/taobao/test/AAA這樣的格式。
method-pattern: 方法名表達式匹配
-d: 輸出類的詳細信息
-E: 開啟正則表達式匹配
-f:輸出當前類的成員變量信息,需要配合-d一起使用
例:
輸出MathGame類的詳細信息,成員變量信息也一并輸出
sc MathGame -d -f
sm(Search Method)
查看已加載類的方法信息,只能看到當前類所聲明的方法,無法看到父類的。
參數(shù)說明:
class-pattern: 類名匹配表達式
method-pattern: 方法名匹配表達式
-d: 展示每個方法的詳細信息
-E: 開啟正則表達式匹配,默認為通配符匹配
例:
sm -d java.lang.String
jad
jad命令將JVM中運行的字節(jié)碼反編譯成java代碼。
參數(shù)說明:
class-pattern: 類名表達式匹配
-E: 開啟正則表達式匹配,默認為通配符匹配
--source-only: 只顯示源碼,可以結(jié)合mc/redefine命令一起使用
例:
反編譯String類下的trim()方法
jad java.lang.String trim
mc
把源代碼編譯成字節(jié)碼
將/root/HelloWorld.java編譯HelloWorld.class,并保存到內(nèi)存中
mc /root/HelloWorld.java
可以通過-d命令指定輸出目錄
mc -d /root/bbb /root/HelloWorld.java
redefine
把新生成的字節(jié)碼文件在內(nèi)存中執(zhí)行
可以通過jad+mc+redefine命令,直接修改源代碼并執(zhí)行
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命令重新加載新的字節(jié)碼
redefine /root/demo/MathGame.class
dump
將已加載類的字節(jié)碼文件保存到特定目錄,默認保存路徑:logs/arthas/classdump
選項說明:
-E: 開啟正則表達式匹配
把String類的字節(jié)碼文件保存到~/logs/arthas/classdump目錄下
dump java.lang.String
把demo包下所有類的字節(jié)碼文件保存到~/logs/arthas/classdump/目錄下
dump demo.*
classloader
獲取類加載器的信息
- 1.顯示所有類加載器的信息
- 2.獲取某個類加載器所在的jar包
- 3.獲取某個資源在哪個jar包
- 4.加載某個類
基本用法:
classloader
參數(shù)說明:
-l: 按類加載實例進行統(tǒng)計
-t: 打印所有ClassLoader的繼承樹
-a: 列出所有ClassLoader加載的類,謹慎使用
-c: 先通過classloader -l獲取類加載器的hashcode,然后再使用classloader -c hashcode,找到類加載器所在的jar包
-r: 獲取資源在哪個jar包,例如 calssloader -r java/lang/String.class
-load: 使用類加載器加載指定的類到方法區(qū)中,例如,classloader -load java.lang.String

image.png