[英]Bytecode manipulation - converting Bytecode representation to Java code representation
对于我的字节码分析项目,我正在使用ASM库来操作字节码。 在字节码级别,此方法在源代码中的声明:
void m(int i, String s)
表示为字符串:
(ILjava/lang/String;)[I
|__ Parameters |__ Return type
在这里,我正在使用字符串操作技术从该String中提取参数。 我需要在另一个String数组中获得这样的输出:(以便我可以将字节码表示形式转换为相应的Java表示形式):
{I,Ljava/lang/String;}
为此,我尝试按照正则表达式提取所有以L
开头和以;
结尾的匹配项;
(要获取形式为Ljava / lang / String的字符串,我可以管理其他字符串):
/\L([^L;]+)\;/
但这并没有给我任何匹配。 我的问题是:
Bytecode representations --> Java code representations
您能指出我吗? 您可以使用org.objectweb.asm.Type
读取method desc
String desc = "(ILjava/lang/String;)[I";
// params
for(Type type : Type.getArgumentTypes(desc)){
System.out.println(type.getClassName());
}
//return type
System.out.println(Type.getReturnType(desc).getClassName());
产量
int
java.lang.String
int[]
至于正则表达式,这应该可以解决问题(参数类型在此后的第一个捕获组中,整个匹配项也确实匹配了L和;)
/L([^;]+);/
这是应该与返回类型匹配的一个(如果字符串在返回类型之后结束...如果省略了某些内容,请告诉我):
/\\)\\[(.+)$/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.