2013-09-10 20 views
2

我們需要爲某些自定義中間語言代碼創建一個CFG。我們目前正在使用Qt + graphviz - 並且CFG看起來像屁股。IDA用於繪圖的是什麼?

具體而言,我們似乎無法弄清楚如何才能

  1. 獲得「流」(自上而下)轉換成圖形,並

  2. 使連接線繞過其他圖形節點。

無論如何,我們正在欣賞令人敬畏的IDA CFG - 並注意到IDA似乎根本沒有使用graphviz! GV爲我們的項目增加了x MB的依賴項,我們希望擺脫它。

所以問題是:有人知道IDA用於圖形渲染和排序的是什麼嗎?

我們考慮編寫一個IDA插件來使用繪圖功能,但是對於我們想要做的事情來說,這看起來有點超出頂部。

回答

1

我認爲IDA使用它自己的圖形庫(儘管你可能會問Ilfak Guilfanov關於這個問題的明確答案)。

你在找什麼叫做「Sugiyama圖形佈局算法」(見: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),但它可能需要一些調整。

希望有幫助!

+0

很好的答案。你知道我們如何在Ida pro中批量輸出serval子程序流程圖嗎?規範。我的問題在這裏:'http:// stackoverflow.com/questions/28619663/ida-pro-gragh-output-batch-mode' – Amir