谢谢。
#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