如何在内部 类 上使用 ASMifier?
How do I use ASMifier on inner classes?
我正在尝试在 java 中获取内部 class 的 ASMified 版本。我的命令看起来像这样 java -classpath "asm-all-3.3.1.jar:myjar.jar" org.objectweb.asm.util.ASMifierClassVisitor path/to/my/class$inner.class
但它似乎只是 return 外部 class 的 ASMified 版本,我在这里做错了什么?
如何使用比 2008 年更新的 ASM 版本,也许还可以处理比 Java 6 更新的 类?我建议这些:
- https://search.maven.org/artifact/org.ow2.asm/asm/9.2/jar
- https://search.maven.org/artifact/org.ow2.asm/asm-util/9.2/jar
我很快尝试了这样的事情(Git Bash 在 Windows 10):
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.jar;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 文件。
我正在尝试在 java 中获取内部 class 的 ASMified 版本。我的命令看起来像这样 java -classpath "asm-all-3.3.1.jar:myjar.jar" org.objectweb.asm.util.ASMifierClassVisitor path/to/my/class$inner.class
但它似乎只是 return 外部 class 的 ASMified 版本,我在这里做错了什么?
如何使用比 2008 年更新的 ASM 版本,也许还可以处理比 Java 6 更新的 类?我建议这些:
- https://search.maven.org/artifact/org.ow2.asm/asm/9.2/jar
- https://search.maven.org/artifact/org.ow2.asm/asm-util/9.2/jar
我很快尝试了这样的事情(Git Bash 在 Windows 10):
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.jar;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 文件。