2

大家好,我正在尝试使用 ASM 字节码 Tree Api 对类进行静态分析。我想我有一个非常基本的问题。在一个说 foobar() 的方法中,我在 foobar 中有一个指令列表(InsnList 有一个列表)。现在我想检查是否在第 10 条指令处,是否调用了函数“barfoo(String args)”。

另外,我需要验证特定指令是否是条件指令。

谢谢和问候, SJ

注意:我已经可以阅读一个类并找到我感兴趣的特定方法并遍历该方法的每个指令。

解决(见:格雷格的评论):

    AbstractInsnNode s = ...
    if(s.getType()==AbstractInsnNode.METHOD_INSN){
        MethodInsnNode methodInvocationNode = (MethodInsnNode) s;
        if(methodInvocationNode.name.equals("barfoo"))
        {
            return true;
        }
    }
4

2 回答 2

2

从查看 ASM javadoc 来看,您似乎必须调用getType()指令节点,如果类型是,METHOD_INSN那么您可以强制转换为MethodInsnNode. 从那里,查看.name方法名称。

于 2011-04-16T21:50:58.653 回答
0

很简单——一旦你确定你调用foobar了 ,就开始在你访问的每条指令上增加一个计数器。在第十次调用时,对 的调用执行检查barfoo

于 2011-04-16T21:00:11.990 回答