嘿所有, 我正在尝试使用ASM字节码树Api为类进行静态分析。 我想我有一个非常基本的问题。在一个说foobar()的方法中,我在foobar中有一个指令列表(InsnList有一个List)。现在我想检查指令号10是否正在调用函数“barfoo(String args)”。
另外,我需要验证特定指令是否是有条件的。
谢谢和问候, SJ
注意:我已经可以阅读一个类并达到我感兴趣的特定方法,并遍历该方法的每个方法。
解决(见:格雷格的评论):
AbstractInsnNode s = ...
if(s.getType()==AbstractInsnNode.METHOD_INSN){
MethodInsnNode methodInvocationNode = (MethodInsnNode) s;
if(methodInvocationNode.name.equals("barfoo"))
{
return true;
}
}
答案 0 :(得分:2)
通过查看ASM javadoc,看起来您必须在指令节点上调用getType()
,如果类型为METHOD_INSN
,则可以转换为MethodInsnNode
。从那里,查看.name
以查看方法名称。
答案 1 :(得分:0)
简单 - 一旦您确定已调用foobar
,就会在您访问的每条指令上开始递增计数器。在第十次调用时,请检查barfoo
。