首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何确定InvokeInstruction (BCEL)调用的方法?

如何确定InvokeInstruction (BCEL)调用的方法?
EN

Stack Overflow用户
提问于 2012-06-07 17:35:25
回答 1查看 1.3K关注 0票数 1

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

如果一个程序的主要方法有一个BCEL对象,我可以查看指令列表并找到那些是InvokeInstructions的:

代码语言:javascript
复制
// 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,有什么建议吗?

如果它简化了一些事情,我现在可以假设程序没有任何多态。不过,在某些时候,我将不得不(保守地)处理它。

Clarification:--我意识到没有一种直接的方法可以做到这一点(例如invoke.getCalledMethodGen()),但我想知道是否有什么方法可以从调用指令中获得足够的不同信息(例如,方法的FQN或equiv)。我可以把它链接回被调用的方法。

EN

回答 1

Stack Overflow用户

发布于 2012-06-07 18:24:24

通常情况下,您不能。BCEL和大多数其他框架使用字节码在单个类上操作。因此,您将阅读所有可用的类(可以懒洋洋地这样做),并构建自己的MethodGens存储库(例如,将FQN方法名称映射到MethodGen实例)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10936910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档