def draw_cfg(funks):
fgs = {}
for b in funks.values():
fg = nx.DiGraph()
for i in b.instrs.values():
fg.add_node(i.addr, { 'label': '{}: {}'.format(i.addr, pretty(i)) })
for i in b.instrs.values():
if i.opcode == INSTR_INC:
fg.add_edge(i.addr, i.next1)
elif i.opcode == INSTR_DEC:
fg.add_edge(i.addr, i.next1)
fg.add_edge(i.addr, i.next2)
elif i.opcode == INSTR_FRK:
fg.add_edge(i.addr, i.next2)
elif i.opcode == INSTR_JMP:
fg.add_edge(i.addr, i.next1)
else:
assert i.opcode == INSTR_RET
fgs[b.addr] = fg
a = nx.nx_agraph.to_agraph(fg)
a.layout(prog='dot')
a.draw('function_{}.png'.format(b.addr))
评论列表
文章目录