大家好,
我正在尝试使用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
以查看方法名称。