about summary refs log tree commit diff stats
path: root/example/disasm/dis_binary.py
diff options
context:
space:
mode:
authorFabrice Desclaux <fabrice.desclaux@cea.fr>2018-12-06 07:47:38 +0100
committerFabrice Desclaux <fabrice.desclaux@cea.fr>2018-12-10 11:10:45 +0100
commit4de79169b5600040ef4af1dd2d02dca55933a884 (patch)
tree41c52c9593a3d4a3864ea08d18793e840a7eaca3 /example/disasm/dis_binary.py
parent68e93fbd8a637e6a2d57e4ea26a1306b14744bd6 (diff)
downloadfocaccia-miasm-4de79169b5600040ef4af1dd2d02dca55933a884.tar.gz
focaccia-miasm-4de79169b5600040ef4af1dd2d02dca55933a884.zip
Add some simple disasm/ir examples
Diffstat (limited to 'example/disasm/dis_binary.py')
-rw-r--r--example/disasm/dis_binary.py29
1 files changed, 29 insertions, 0 deletions
diff --git a/example/disasm/dis_binary.py b/example/disasm/dis_binary.py
new file mode 100644
index 00000000..3e12ca91
--- /dev/null
+++ b/example/disasm/dis_binary.py
@@ -0,0 +1,29 @@
+import sys
+from miasm2.analysis.binary import Container
+from miasm2.analysis.machine import Machine
+
+fdesc = open(sys.argv[1], 'rb')
+
+# The Container will provide a *bin_stream*, bytes source for the disasm engine
+# It will prodive a view from a PE or an ELF.
+cont = Container.from_stream(fdesc)
+
+# 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())