mirror of https://github.com/ConsenSys/mythril
parent
3ff43c8d2f
commit
1588d92654
@ -0,0 +1,63 @@ |
|||||||
|
import graphviz as gv |
||||||
|
|
||||||
|
|
||||||
|
styles = { |
||||||
|
'graph': { |
||||||
|
'overlap': 'false', |
||||||
|
'fontsize': '16', |
||||||
|
'fontcolor': 'white', |
||||||
|
'bgcolor': '#333333', |
||||||
|
}, |
||||||
|
'nodes': { |
||||||
|
'fontname': 'Helvetica', |
||||||
|
'shape': 'box', |
||||||
|
'fontcolor': 'white', |
||||||
|
'color': 'white', |
||||||
|
'style': 'filled', |
||||||
|
'fillcolor': '#006699', |
||||||
|
}, |
||||||
|
'edges': { |
||||||
|
'style': 'dashed', |
||||||
|
'dir': 'forward', |
||||||
|
'color': 'white', |
||||||
|
'arrowhead': 'normal', |
||||||
|
'fontname': 'Courier', |
||||||
|
'fontsize': '12', |
||||||
|
'fontcolor': 'white', |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
def apply_styles(graph, styles): |
||||||
|
graph.graph_attr.update( |
||||||
|
('graph' in styles and styles['graph']) or {} |
||||||
|
) |
||||||
|
graph.node_attr.update( |
||||||
|
('nodes' in styles and styles['nodes']) or {} |
||||||
|
) |
||||||
|
graph.edge_attr.update( |
||||||
|
('edges' in styles and styles['edges']) or {} |
||||||
|
) |
||||||
|
return graph |
||||||
|
|
||||||
|
|
||||||
|
def generate_callgraph(disassembly, file): |
||||||
|
|
||||||
|
graph = gv.Graph(format='svg') |
||||||
|
|
||||||
|
index = 0 |
||||||
|
|
||||||
|
for block in disassembly.blocks: |
||||||
|
easm = block.get_easm().replace("\n", "\l") |
||||||
|
|
||||||
|
graph.node(str(index), easm) |
||||||
|
index += 1 |
||||||
|
|
||||||
|
for xref in disassembly.xrefs: |
||||||
|
|
||||||
|
graph.edge(str(xref[0]), str(xref[1])) |
||||||
|
|
||||||
|
|
||||||
|
graph = apply_styles(graph, styles) |
||||||
|
|
||||||
|
graph.render(file) |
||||||
|
|
Loading…
Reference in new issue