ASM根据xml中定义的规则解析.class

时间:2014-02-05 07:38:06

标签: java parsing bytecode java-bytecode-asm

我使用ASM字节码阅读器来解析代码中存在的.class文件。 但是我想获得在类中定义的特定字符串,其中将在xml中提及。

那么如何使用XML并解析.class中的字符串。正如我所看到的那样,ClassReader只将.class作为参数而不是XML或任何其他格式。

我正在使用这样的东西:

InputStream in=String.class.getResourceAsStream("/java/lang/String.class");

ClassReader classReader=new ClassReader(in);

classReader.accept(v, 0);

请告诉我有没有办法根据xml文件中定义的规则解析.class?

提前致谢...

衙署

1 个答案:

答案 0 :(得分:1)

据我了解,您希望执行以下操作:您正在接收 .class 文件,然后您想从中提取XML文件中指定的某种信息。如果是这样的话:ASM不需要知道您需要什么样的信息。 ASM将清楚地读取类文件。如果你明白想知道某个特定的String是否是类的常量池的一部分,你可以使用捷径来获得通知:覆盖ClassReader的{​​{1}}方法,如这样:

readUTF8(int, char[])

当然,您必须提供一些知道您感兴趣的public MyClassReader extends ClassReader { private final Set<String> constantPoolStrings = new HashSet<String>(); // Add constructors here @Override public String readUTF8(int index, char[] buf) { String value = super.readUTF8(index, buf); constantPoolStrings.add(value); return value; } public boolean hasString(String value) { // From the details in your comment, we will need to do a fuzzy search. for(String poolString : constantPoolStrings) { if(poolString.contains(value)) { return true; } } return false; } } 的逻辑:例如,如果您有一个包含特定单词的XML文件,则需要解析此文件并提取这些单词。您可以查询这些String的{​​{1}}。