是否可以获取IDA Pro图形概述的节点和边数?如果生成一个wingraph32流程图,我能够获得此信息,但是似乎wingraph32不适用于非常大的功能。 wingraph32还可以支持非常大的图形吗?

谢谢。

#1 楼

如果要在IDA中获取函数图的节点和边数,则可以使用给定的IDAPython代码进行计算:

func = idaapi.get_func(here())
g = idaapi.FlowChart(func)

nodes = 0
edges = 0
for x in g:
  nodes += 1
  for succ in x.succs():
    edges += 1

  for pred in x.preds():
    edges += 1

print "Number of nodes", nodes
print "Number of edges", edges


对于wingraph32工具,我建议您改为使用“邻近查看器”。当光标位于函数内部时,只需按“-”键即可。

评论


嗨,谢谢你的代码。它产生正确数量的节点,但是与wingraph32产生的边缘计数相比,边缘计数似乎不正确。为什么您为什么推荐Proximity Viewer?它似乎没有给我CFG。

–user1118764
18年6月4日在0:50

我回过头来在较小的图上重新运行您的代码,以便实际上可以计算段数并将其与流程图给我的内容进行比较。看来您的输出是正确的,而流程图为我提供了一种更高的边沿计数方式(甚至将1个边沿报告为2个边沿)。流程图确实算出“边缘段”,这与边缘的数量不同吗?

–user1118764
18年4月4日在0:57

IIRC,流程图将考虑功能块。也许@igorsk知道的更好。

– joxeankoret
18年6月4日在7:31