您好我想使用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);
}
答案 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(..)。