簡體   English   中英

如何在內部類中使用 ASMifier?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM