0

我正在尝试使用 ASM 字节码树 API 对 Java 代码进行静态分析。我有一个 ClassNode cn、MethodNode m 和该方法中的指令列表说 InsnList 列表。

假设对于给定的指令(即 AbstractInsnNode)s,我需要在上述指令列表中找到变量 at 的所有定义/赋值。为了更清楚起见,假设在第 2 行定义并初始化了一个变量 var,然后在第 8 行分配了一些其他值,然后在第 12 行使用。在这种情况下,第 12 行是 my 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)在上述代码中的任何位置被修改或分配。保持简单,只是成员变量(没有静态函数或委托给另一个类的函数)。

4

1 回答 1

1

SourceInterpreter为 MethodNode 中的相应指令计算每个FrameSourceValue 。基本上,它告诉哪些指令可以为给定的变量或堆栈槽赋值。

有关 ASM分析包的更多信息,另请参阅ASM 用户指南。

但是,如果您只需要检测是否分配了某个变量,那么您所要做的就是查找具有相应变量索引的 xSTORE 指令。

于 2011-04-20T20:13:11.010 回答