ASM在.class文件中搜索String

时间:2014-02-06 07:13:19

标签: java parsing search bytecode

您好我想使用ASM在/java/lang/String.class文件中搜索特定字符串。我知道以下方法可以做到这一点

         @Override 
      public String readUTF8(int index, char[] buf) {
String value = super.readUTF8(index, buf);
constantPoolStrings.add(value);
return value;
      }

但不确定如何使用它。我发布了我的代码,请你告诉我它是如何实现的。

public class DemoClassReader {
public static void main(String[] args) throws IOException {
ClassVisitor v= new ClassVisitor(Opcodes.ASM4) {
            @Override

public void visit(int version, int access, String name,
                              String signature, String superName, String[] interfaces) {

System.out.println(" class: "+name);
super.visit(version, access, name, signature, superName, interfaces);
            }
                    } ;

InputStream in=String.class.getResourceAsStream("/java/lang/String.class");
ClassReader classReader=new ClassReader(in);
classReader.accept(v, 0);
    }

1 个答案:

答案 0 :(得分:2)

要捕获字符串文字,您可以实现以下MethodVisitor:

ClassReader classReader = new ClassReader(in);
classReader.accept(new ClassVisitor(Opcodes.V1_7) {
  public visitMethod(int access, String name, String desc, 
       String signature, String[] exceptions) {
    return new MethodVisitor(Opcodes.V1_7) {
      public void visitLdcInsn(Object cst) {
        if(cst instanceof String) {
           // capture your string
        }
      }
    };
  }
}, 0);

请参阅JavaDoc中的visitLdcInsn(..)