mirror of
https://github.com/cea-sec/miasm
synced 2026-06-21 13:48:18 +00:00
33 lines
1.1 KiB
Python
33 lines
1.1 KiB
Python
from __future__ import print_function
|
|
import sys
|
|
from miasm.analysis.binary import Container
|
|
from miasm.analysis.machine import Machine
|
|
from miasm.core.locationdb import LocationDB
|
|
|
|
fdesc = open(sys.argv[1], 'rb')
|
|
loc_db = LocationDB()
|
|
|
|
# The Container will provide a *bin_stream*, bytes source for the disasm engine
|
|
# It will provide a view from a PE or an ELF.
|
|
cont = Container.from_stream(fdesc, loc_db)
|
|
|
|
# The Machine, instantiated with the detected architecture, will provide tools
|
|
# (disassembler, etc.) to work with this architecture
|
|
machine = Machine(cont.arch)
|
|
|
|
# Instantiate a disassembler engine, using the previous bin_stream and its
|
|
# associated location DB. The assembly listing will use the binary symbols
|
|
mdis = machine.dis_engine(cont.bin_stream, loc_db=cont.loc_db)
|
|
|
|
# Run a recursive traversal disassembling from the entry point
|
|
# (do not follow sub functions by default)
|
|
addr = cont.entry_point
|
|
asmcfg = mdis.dis_multiblock(addr)
|
|
|
|
# Display each basic blocks
|
|
for block in asmcfg.blocks:
|
|
print(block)
|
|
|
|
# Output control flow graph in a dot file
|
|
open('bin_cfg.dot', 'w').write(asmcfg.dot())
|