将 InsnList 拆分为基本块



在ASM Tree API中,我有一个InsnList,其中包含方法中的指令列表。

我想将其拆分为基本块:一系列指令,使得除最后一条指令之外的每一条指令只有一个后续指令,并且除了第一条指令之外,任何指令都不能成为跳转的目标。

我将如何实现这一点?

在 Java 中,7+ 堆栈帧将包含在方法操作码中。遍历方法的 InsnList,并按每个 FrameInsn 拆分块。

例:

List<InsnList> l = Lists.newList();
InsnList il = new InsnList();
for (AbstractInsnNode ain : method.instructions.toArray()) {
    if (ain.getType == AbstractInsnNode.FRAME){
        l.add(il);
        il = new InsnList();
    } else {
        il.add(ain);
    }
}

相关内容

  • 没有找到相关文章

最新更新