[英]How do I use ASMifier on inner classes?
我正在嘗試在 java 中獲得內部 class 的 ASMified 版本。 My command looks something like this java -classpath "asm-all-3.3.1.jar:myjar.jar" org.objectweb.asm.util.ASMifierClassVisitor path/to/my/class$inner.class
But it seems to only return外部 class 的 ASMified 版本,我在這里做錯了什么?
使用比 2008 年更新的 ASM 版本怎么樣,也許它也可以處理比 Java 6 更新的類? 我建議這些:
我很快嘗試了這樣的事情(Windows 10 上的 Git Bash):
java -cp "asm-9.2.jar;asm-util-9.2.jar" org.objectweb.asm.util.ASMifier MyClass\$MyInnerClass.class
在 Cmd.exe 中它將是:
java -cp asm/9.2/asm-9.2.jar;asm-util/9.2/asm-util-9.2.jar org.objectweb.asm.util.ASMifier MyClass$MyInnerClass.class
兩種變體都能很好地工作。
當你嘗試時你會遇到問題
echo path/to/my/outer$inner.class
這將打印
path/to/my/outer.class
您的 shell 將$inner
解釋為變量引用,並且由於您的環境中可能沒有定義此類變量,因此它將用空文本替換它,在這種情況下會導致外部 class 的路徑和名稱。
這說明了為什么默默地做錯誤的事情比失敗並顯示錯誤消息(或異常)更糟糕。
當您在美元符號前面加上反斜杠時,即path/to/my/outer\$inner.class
,它將被解釋為文字$
並起作用。 或者導致其他錯誤,正如其他答案所提到的,您的 ASM 版本真的很舊,並且在解析較新的 class 文件時可能會出現問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.