2

こんにちは、ASM バイトコード Tree Api を使用して、クラスの静的分析を実行しようとしています。かなり基本的な質問があると思います。foob​​ar() というメソッドでは、foobar 内に命令のリストがあります (リストを持つ InsnList)。ここで、命令番号 10 で関数 "barfoo(String args)" が呼び出されているかどうかを確認したいと思います。

また、個別に、特定の命令が条件付きかどうかを確認する必要があります。

ありがとう、SJ

注: すでにクラスを読み取って、関心のある特定のメソッドに到達し、そのメソッドの各命令を反復処理できます。

解決済み (グレッグのコメントを参照):

    AbstractInsnNode s = ...
    if(s.getType()==AbstractInsnNode.METHOD_INSN){
        MethodInsnNode methodInvocationNode = (MethodInsnNode) s;
        if(methodInvocationNode.name.equals("barfoo"))
        {
            return true;
        }
    }
4

2 に答える 2

2

getType()ASM javadocを見ると、命令ノードを呼び出す必要があるように見えます。タイプがの場合はMETHOD_INSN、にキャストできますMethodInsnNode。そこから.name、メソッド名を確認してください。

于 2011-04-16T21:50:58.653 に答える
0

シンプル - を呼び出したと判断したらfoobar、アクセスする各命令でカウンターをインクリメントし始めます。10 回目の呼び出しで、 の呼び出しのチェックを実行しますbarfoo

于 2011-04-16T21:00:11.990 に答える