获取指令的FrameNode(ASM)

时间:2016-12-09 21:17:42

标签: java java-bytecode-asm

我目前正在尝试使用ASM树API在方法中间插入一个框架作为未来的跳转目标。

我尝试使用Analyzer类来计算方法中的堆栈和变量大小:

Analyzer<BasicValue> analyzer = new Analyzer<>(new BasicInterpreter());
analyzer.analyze(className, methodNode);
Frame<BasicValue>[] frames = analyzer.getFrames();

据我了解,帧的索引对应于方法中指令的索引。

我的问题是这些帧不存储创建可插入方法的FrameNode所需的信息;它们似乎只包含局部变量/堆栈大小的计数,但F_FULL需要所有类型和操作码的完整列表。

我知道ClassWriter + COMPUTE_FRAMES可以解决我的问题,但是我不愿意使用它,因为我必须为我想要转换的每个文件加载整个类路径。我目前希望这不是我唯一的选择,但ASM javadocs似乎没有答案。

有没有办法在ASM方法中为任意指令创建FrameNode

编辑:或者在没有加载类路径的情况下有没有正确的COMPUTE_FRAMES方法?

0 个答案:

没有答案
相关问题