0
我正在爲嚴重混淆的應用程序使用反混淆器。我想刪除很多冗餘方法來簡化代碼。不幸的是,我沒有足夠的知識與asm和字節碼能夠做到這一點,有人請賜教我如何使用asm來檢查被調用的方法嗎?檢查是否使用ASM調用方法
我正在爲嚴重混淆的應用程序使用反混淆器。我想刪除很多冗餘方法來簡化代碼。不幸的是,我沒有足夠的知識與asm和字節碼能夠做到這一點,有人請賜教我如何使用asm來檢查被調用的方法嗎?檢查是否使用ASM調用方法
收集由類調用的方法列表非常簡單。如果您使用的是ASM SAX API,則只需覆蓋
public void visitMethodInsn(int opcode, String owner, String name, String desc)
並收集方法名稱,所有者和簽名。
如果您使用樹API,MethodInsnNodes將提供相同的信息。
生成一個類聲明/定義的方法列表同樣是直接的 - 每個將導致調用visitMethod或樹api中的方法節點。
你的回答很明顯:獲得關於ASM和字節碼的更多知識。兩者都有[文檔](http://download.forge.objectweb.org/asm/asm4-guide.pdf)[可用](http://docs.oracle.com/javase/specs/jvms/se7/html/ JVM中-6.html)。使用'javap -c'反編譯應用程序(或任何Java代碼)並戳穿輸出應該也是有幫助的。 – millimoose
如果應用程序使用反射調用這些方法,則可能無法檢測到方法是否曾被調用過。 – zapl
它不使用反射,我知道那很多。 –