我正在尝试使用ASM字节码树API进行Java代码的静态分析。 我有一个ClassNode cn,MethodNode m和该方法中的指令列表说InsnList列表。变量定义和赋值检测asm字节码
假设对于给定的指令(即AbstractInsnNode),我需要在上面的指令列表中找到变量的所有定义/赋值。为了更清楚地说明,假设在第2行定义并初始化变量var,然后在第8行上分配其他值,然后在第12行上使用。在这种情况下,行号12是我的s。此外,假设大量的条件代码在两行之间。
这可能与ASM有关吗?怎么样??
感谢和问候, SJ
为了清楚起见,
public void funcToAnalyze(String k, SomeClass v) {
int numIter = 0;
/*
Do cool stuff here.... modifies member variables and passed params too
*/
if (v.rank > 1 || numIter>200) {
magicFunction(k, 1);
}
}
这里,假设条件是JumpInsnNode(当前指令),我需要找到,如果(在哪里)任何变量在条件(v.rank和numIter在这种情况下)被修改或分配在上面的代码中的任何地方。保持简单,仅仅是成员变量(没有静态函数或委托给另一个类的功能)。
对于简单的情况可以做。它很快就会变得复杂,取决于你想要达到的目标。 – 2011-04-18 07:58:15
我假设我们在这里谈到成员变量?你想要的一般是不可能的。您可以收集当前方法中引用此变量的putfield指令。但是你也必须考虑被调用的方法,并以某种方式访问这个变量。由于重载,你必须在这里考虑来自编译时类型类以及任何重载类的所有成员。 – Ingo 2011-04-18 09:52:00
是的,我只想要仅仅是成员变量的简单情况。如何收集当前方法中引用此变量的putfield指令。实际上,我目前的陈述可能有一个或多个变量,我怎么知道每个变量。 – dreamer13134 2011-04-18 15:06:55