55 lines
1.5 KiB
Python
55 lines
1.5 KiB
Python
from binaryninja import *
|
|
import os.path
|
|
|
|
blue = HighlightStandardColor.BlueHighlightColor
|
|
black = HighlightStandardColor.BlackHighlightColor
|
|
white = HighlightStandardColor.WhiteHighlightColor
|
|
clear = HighlightStandardColor.NoHighlightColor
|
|
|
|
|
|
MBASE = 0x0007fffffdb7000
|
|
|
|
|
|
def viz(view, fname, base=0):
|
|
"""
|
|
Given a Manticore workspace, or trace file, highlight the basic blocks.
|
|
"""
|
|
fname = fname.replace('/mnt/hgfs', '~')
|
|
fname = os.path.expanduser(fname)
|
|
log_info('got: {}'.format(fname))
|
|
if os.path.isdir(fname):
|
|
for f in os.listdir(fname):
|
|
if f.endswith('trace'):
|
|
fullpath = os.path.join(fname, f)
|
|
viz_trace(view, fullpath, base)
|
|
else:
|
|
viz_trace(view, fname, base)
|
|
|
|
|
|
def viz_trace(view, fname, base=0):
|
|
"""
|
|
Given a Manticore trace file, highlight the basic blocks.
|
|
"""
|
|
with open(os.path.expanduser(fname)) as f:
|
|
addrs = [int(x.strip(), 0) for x in f.readlines()]
|
|
_viz_addrs(view, addrs, base, blue)
|
|
|
|
|
|
def clear_all(view, fname, base=0):
|
|
with open(os.path.expanduser(fname)) as f:
|
|
addrs = [int(x.strip(), 0) for x in f.readlines()]
|
|
_viz_addrs(view, addrs, base, white)
|
|
|
|
|
|
def _viz_addrs(view, addrs, base, hl):
|
|
for addr in addrs:
|
|
if base:
|
|
addr -= base
|
|
_highlight_block(view, addr, hl)
|
|
|
|
def _highlight_block(view, addr, hl):
|
|
blocks = view.get_basic_blocks_at(addr)
|
|
for b in blocks:
|
|
b.set_user_highlight(hl)
|
|
|