Java 如何使用ASM访问者检查堆栈?
我试图使用Java字节码工程库来执行静态分析。在这种情况下,我想检查分配给字段的变量 我有一个MethodVisitor,它实现了visitFieldInsn方法。我特别在找putfield命令。这没问题。问题是,当我遇到putfield时,我希望能够访问将分配给该字段的变量。具体来说,我想访问有关变量类型的信息 目前,我只需要查看堆栈顶部的内容,但是如果有更通用的方法来检查它,那就更好了Java 如何使用ASM访问者检查堆栈?,java,assembly,bytecode,java-bytecode-asm,Java,Assembly,Bytecode,Java Bytecode Asm,我试图使用Java字节码工程库来执行静态分析。在这种情况下,我想检查分配给字段的变量 我有一个MethodVisitor,它实现了visitFieldInsn方法。我特别在找putfield命令。这没问题。问题是,当我遇到putfield时,我希望能够访问将分配给该字段的变量。具体来说,我想访问有关变量类型的信息 目前,我只需要查看堆栈顶部的内容,但是如果有更通用的方法来检查它,那就更好了 有没有办法使用ASM检查堆栈上的变量 我不熟悉ASM,但我做了一些与EclipseJavaAST框架类似的
有没有办法使用ASM检查堆栈上的变量 我不熟悉ASM,但我做了一些与EclipseJavaAST框架类似的事情。为了了解变量,我必须自己在AST访问者的适当visitX方法中跟踪变量声明。一旦我知道哪些AST节点对应于变量声明,就不难了。首先,如果您可以假设字节码是有效的,那么分配给字段的值的类型应该与字段类型匹配,您可以使用ClassReader API提前读取字段类型 但是,如果需要跟踪给定指令指针的堆栈或变量插槽上的每个值的来源,可以将Analyzer API与Source解释器一起使用。基本上,它允许查找产生给定值的指令,并且您可以使用有关该指令的信息来推断类型,例如,如果它从与方法参数相对应的变量读取,或者如果值是从方法调用返回的,那么在这两种情况下,您都可以从方法描述符获取类型。也可以看到我以前的博客文章,上面有一个