Skip to content

Instantly share code, notes, and snippets.

@icecr4ck
Created June 2, 2019 20:59
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save icecr4ck/c8fab6e71c4e100ae48e5b34b349192f to your computer and use it in GitHub Desktop.
Save icecr4ck/c8fab6e71c4e100ae48e5b34b349192f to your computer and use it in GitHub Desktop.
Basic script to extract intermediate representation CFG with Miasm (and apply simplifications)
import sys
from miasm.analysis.machine import Machine
from miasm.analysis.binary import Container
from miasm.analysis.simplifier import IRCFGSimplifierSSA, IRCFGSimplifierCommon
cont = Container.from_stream(open(sys.argv[1], 'rb'))
machine = Machine('x86_64')
mdis = machine.dis_engine(cont.bin_stream, loc_db=cont.loc_db)
asmcfg = mdis.dis_multiblock(cont.entry_point)
ira = machine.ira(mdis.loc_db)
ircfg = ira.new_ircfg_from_asmcfg(asmcfg)
#head = ircfg.heads()[0]
# Common simplifications: dead code removal and expression simplification
#ircfg_simplifier = IRCFGSimplifierCommon(ira)
#ircfg_simplifier.simplify(ircfg, head)
# SSA simplifications: SSA, expression propagation, Out-of-SSA, dead code removal and expression simplification
#ircfg_simplifier = IRCFGSimplifierSSA(ira)
#ircfg_simplifier.simplify(ircfg, head)
open('bin_cfg.dot', 'w').write(ircfg.dot())
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment