反编译器循环嵌套顺序和代码生成顺序

时间:2014-12-04 20:12:12

标签: graph graph-theory decompiler

从基本块的控制流程图中获得“自然循环”之后。这些循环如何从最内层到最外层排序?即最内层循环不包含其他循环?

我使用dominator方法获取了循环,请参阅标题为“使用Dominators识别自然循环”的幻灯片:http://www.cs.colostate.edu/~mstrout/CS553Fall07/Slides/lecture15-control.pdf

此外,应该使用什么算法来遍历控制流图,以便写出每个节点会产生正确的输出代码?

1 个答案:

答案 0 :(得分:2)

在结构良好的程序中(即没有getos),循环的开始必须支配循环的内容。

每个有传入备份的节点都必须是循环的头部。但是,由于能够指定显式continue s,您可以自由地获得实际的循环内容。必须在循环中的最小节点集是所有具有备份到头部的块以及所有可从它们反向访问并由头部支配的块。可以在循环中的最大节点集当然只是由头部支配的所有节点。

嵌套是由一个循环的头部是否在另一个循环的内容中确定的。在某些情况下,您可以自由决定是否将循环放在外循环中。

相关问题