标识Apache Byte代码工程库(BCEL)中的本地变量数据类型



我正在使用apache bcel库读取Java类文件。它允许从org.apache.bcel.classfile.Method.getLineNumberTable()调用中识别给定方法的局部变量名称。

但细节不包括局部变量的数据类型相关的详细信息。而且也找不到其他任何方法来获取可变DAAT类型。几乎没有帮助

实际上有一种方法。我们可以通过迭代method.getLocalVariableTable().getLocalVariableTable()获得局部变量签名。一旦我们拥有签名,就有一个名为org.apache.bcel.classfile.Utility的实用程序类,并且有一个转换方法Utility.signatureToString(variableSignature)

公用事业类的Javadoc -https://commons.apache.org/proper/commonsbcel/apidocs/org/apache/bcel/bcel/classfile/classfile/utility.htmel.html

发布示例代码段

这是类文件将用于分析

的示例Java文件
public class ExampleClassFile {
    public void testClass(int input){
        int intVal= 0;
        String stringVal= "randomText";
        boolean booleanVal= false;
        int []intArray = new int[2];
    }
}

这是用于分析上述.class文件

的BCEL代码
JavaClass javaClass = Repository.lookupClass("ExampleClassFile");
for(Method method: javaClass.getMethods()){
    for(LocalVariable localVariable: method.getLocalVariableTable().getLocalVariableTable()){
        System.out.println(Utility.signatureToString(localVariable.getSignature()) + " " + localVariable.getName());
    }
}

这些是输出结果

  1. int输入
  2. int intval
  3. 字符串字符串
  4. boolean booleanval
  5. int [] intarray

相关内容

  • 没有找到相关文章

最新更新