1

BCELライブラリ内の特定のInvokeInstructionの呼び出し先のMethodGenを判別しようとしています。問題は、InvokeInstructionを使用して、呼び出そうとしているMethodGenに到達する方法がわからないことです。

プログラムのメインメソッド用のBCELMethodGenオブジェクトがある場合は、命令のリストを調べて、InvokeInstructionsであるものを見つけることができます。

// Assume MethodGen mainMG is given to us
Instruction[] insns = mainMG.getInstructionList().getInstructions();
for(Instruction insn : insns) {
    if(insn instanceof InvokeInstruction) {
        // great, found an invoke instruction
        InvokeInstruction invoke = (InvokeInstruction)insn;

        // what do I do with it now?
    }
}

BCELのドキュメントのいくつかは素晴らしいものであり、他の部分はちょっと欠けています。InvokeInstructionを呼び出されているメソッドのMethodGenにリンクする方法についての提案はありますか?

それが物事を単純化するならば、私は今のところプログラムがポリモーフィズムを持っていないと仮定することができます。ある時点で私はそれに対処しなければならないでしょうが(保守的に)。


明確化:これを行うための直接的なルート(例invoke.getCalledMethodGen())がないことはわかっていますが、invoke命令(例:メソッドのFQNまたは同等のもの)からリンクできる十分な個別の情報を取得できる方法があるかどうか疑問に思っています呼び出されているメソッドに戻ります。

4

1 に答える 1

0

一般的にはできません。単一のクラスで動作するバイトコードを操作するための BCEL およびその他のほとんどのフレームワーク。そのため、利用可能なすべてのクラスを読み取り (怠惰に行うこともできます)、独自の MethodGen のリポジトリを構築します (たとえば、FQN メソッド名から MethodGen インスタンスへのマップ)。

于 2012-06-07T18:24:24.623 に答える