1

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

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

我将如何做到这一点?

4

1 回答 1

3

在 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);
    }
}
于 2016-05-29T02:54:55.077 回答