2013-08-18 19 views
0

我正在爲嚴重混淆的應用程序使用反混淆器。我想刪除很多冗餘方法來簡化代碼。不幸的是,我沒有足夠的知識與asm和字節碼能夠做到這一點,有人請賜教我如何使用asm來檢查被調用的方法嗎?檢查是否使用ASM調用方法

+6

你的回答很明顯:獲得關於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

+0

如果應用程序使用反射調用這些方法,則可能無法檢測到方法是否曾被調用過。 – zapl

+0

它不使用反射,我知道那很多。 –

回答

1

收集由類調用的方法列表非常簡單。如果您使用的是ASM SAX API,則只需覆蓋

public void visitMethodInsn(int opcode, String owner, String name, String desc) 

並收集方法名稱,所有者和簽名。

如果您使用樹API,MethodInsnNodes將提供相同的信息。

生成一個類聲明/定義的方法列表同樣是直接的 - 每個將導致調用visitMethod或樹api中的方法節點。