1

我正在尝试确定 BCEL 库中给定 InvokeInstruction 的被调用方的 MethodGen。问题是我不知道如何使用 InvokeInstruction 来访问它试图调用的 MethodGen。

如果我有一个程序的主要方法的 BCEL MethodGen 对象,我可以浏览指令列表并找到那些是 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()),但我想知道是否有某种方法可以从调用指令(例如方法的 FQN 或等效项)中获得足够的不同信息,我可以链接它回到被调用的方法。

4

1 回答 1

0

一般你不能。BCEL 和大多数其他框架,用于处理在单个类上运行的字节码。因此,您将阅读所有可用的类(可以懒惰地这样做)并构建您自己的 MethodGen 存储库(例如 FQN 方法名称到 MethodGen 实例的映射)。

于 2012-06-07T18:24:24.623 回答