0

Javaコードの静的分析にASMバイトコードツリーAPIを使用しようとしています。私はClassNodecn、MethodNode mを持っており、そのメソッドの命令のリストはInsnListlistと言っています。

与えられた命令(つまりAbstractInsnNode)について、上記の命令リストのsにある変数のすべての定義/割り当てを見つける必要があるとします。より明確にするために、変数varが2行目で定義および初期化され、8行目で他の値が割り当てられ、12行目で使用されているとします。この場合、12行目が私のです。また、その間の行に多くの条件付きコードがあると想定します。

これは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内の対応する命令の各フレームSourceValueを計算します。基本的に、どの命令が特定の変数またはスタックスロットに値を置くことができるかを示します。

ASM分析パッケージの詳細については、 ASMユーザーガイドも参照してください。

ただし、特定の変数が割り当てられているかどうかを検出する必要がある場合は、対応する変数インデックスを持つxSTORE命令を探すだけです。

于 2011-04-20T20:13:11.010 に答える