gpt4 book ai didi

java - 如何使用 ASM 访问器检查堆栈?

转载 作者:行者123 更新时间:2023-11-30 06:38:50 25 4
gpt4 key购买 nike

我正在尝试使用 Java 字节码工程库 ASM执行静态分析。我有这样的情况,我想检查分配给一个字段的变量。

我有 MethodVisitor,它实现了 visitFieldInsn() 方法。我专门寻找 putfield 命令。那没问题。问题是,当我遇到 putfield 时,我希望能够访问将要分配给该字段的变量。具体来说,我想访问有关变量的类型的信息。

目前我真的只需要查看堆栈顶部的内容,但如果有更通用的方法来检查它就更好了。

有没有办法使用 ASM 检查堆栈上的变量?

最佳答案

首先,如果您可以假设字节码是有效的,则分配给字段的值的类型应该与字段类型匹配,您可以使用 ClassReader API 提前读取。

但是,如果您需要跟踪给定指令指针的堆栈或变量槽中的每个单独值的来源,您可以将 Analyzer API 与 SourceInterpreter 结合使用。基本上,它将允许找到产生给定值的指令,并且您可以使用有关该指令的信息来推断类型(例如,如果它从对应于方法参数的变量中读取,或者如果值是从方法调用返回的,那么在两者中在某些情况下,您可以从方法描述符中获取类型)。另请参阅我的旧博客文章,其中包含 example of using SourceInterpreter .

关于java - 如何使用 ASM 访问器检查堆栈?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1852758/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com