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

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

谢谢并恭祝安康,
J

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

解决了(请参阅:格雷格的评论):

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

最佳答案

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

07-26 01:56