我们需要为一些自定义中间语言代码创建一个CFG . 我们目前正在使用Qt graphviz - 而CFG看起来像屁股 .
具体来说,我们似乎无法弄清楚我们怎么做
-
将“流”(从上到下)放入图中,然后
-
使连接线绕其他图形节点移动 .
无论如何,我们正在欣赏令人敬畏的IDA CFG - 并注意到IDA似乎根本没有使用graphviz! GV为我们的项目添加了x MB的依赖项,我们很乐意摆脱它 .
问题是:有没有人知道IDA用于图形渲染和排序的内容?
我们考虑编写一个IDA插件来使用图形功能,但对于我们想要做的事情来说,这似乎有点过头了 .
2 回答
我认为IDA使用自己的图形库(尽管你可能会问Ilfak Guilfanov对此有明确的答案) .
你要找的是"Sugiyama graph layout algorithm"(见:Layered graph drawing) .
关于citeseerx的这个问题(尤其关注CFG)有一篇非常有趣的论文(参见:Graph Layout for Code Flow Visualization) .
正如前面提到的论文所述,OGDF(http://www.ogdf.net/)提供了Sugiyama布局算法(http://www.ogdf.net/doc-ogdf/classogdf_1_1_sugiyama_layout.html),尽管它可能需要一些调整 .
希望有所帮助!
最后我检查了他们使用过(Q)WinGraph,你可以从this page(基于VCG tool)获得他们修改过的来源 .
类似的东西是yED,您可能还想查看并且few IDA scripts也使用TouchGraph(似乎不是免费的) .