我使用任意IL构建CFG,并想将该CFG转换回IL。 CFG中顶点的顺序当然不等于原始IL指令的顺序。将CFG转换为IL
这很好,但过于复杂一些东西。想象:
Jump 'B'
'C': Return
'B': Jump 'C'
这将导致一个流图是这样的:(跳转B) - >(跳转C) - >(返回) 当然,这是一个简化的例子,但转换出来时,它示出了该问题的CFG。
在学术界有没有关于此主题的任何信息?我认为自下而上遍历图将非常优雅,但在更复杂的情况下不起作用。
解决方案可能是自顶向下并搜索CF合并,但在这种情况下,我无法正确处理循环。所以唯一的办法就是寻找可能的CF合并,如果它发生的话。如果没有,我们必须有一个循环,这意味着循环是首选,并在之后评估连续路径。这听起来像是一个可解决的问题,但它也非常昂贵,并且可能存在更加优雅的解决方案。除了一个循环在考虑一个“break”语句时还可能导致CF合并。
一条指令需要一个标签,因为它是一个基本块的领导者,它没有前任,或者多于一个前辈,或者只有一个前辈,但是前辈具有多于一个后辈。 – inv 2010-08-04 00:56:23