summaryrefslogtreecommitdiff
path: root/python/examples/bin_info.py
diff options
context:
space:
mode:
authorRusty Wagner <rusty@vector35.com>2017-02-10 16:42:12 -0500
committerRusty Wagner <rusty@vector35.com>2017-02-10 16:42:12 -0500
commit4b988c0d24c8d8c8dc67485f3aaeb7106eb4af18 (patch)
tree2cd7242ff78a8f92cc268b2ccb7afc69734d9f6b /python/examples/bin_info.py
parent8c42dabe92340b4d342f3b4e7594fb70f1890e41 (diff)
parentf8687791c32688a78b5e6667b2af9689816e41af (diff)
Merge branch 'dev'
Diffstat (limited to 'python/examples/bin_info.py')
-rw-r--r--python/examples/bin_info.py91
1 files changed, 65 insertions, 26 deletions
diff --git a/python/examples/bin_info.py b/python/examples/bin_info.py
index 48073894..4c4ab8fd 100644
--- a/python/examples/bin_info.py
+++ b/python/examples/bin_info.py
@@ -1,34 +1,73 @@
#!/usr/bin/env python
-import sys, binaryninja, time
-if sys.platform.lower().startswith("linux"):
- bintype="ELF"
-elif sys.platform.lower() == "darwin":
- bintype="Mach-O"
-else:
- raise Exception, "%s is not supported on this plugin" % sys.platform
+# Copyright (c) 2015-2016 Vector 35 LLC
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+# IN THE SOFTWARE.
-if len(sys.argv) > 1:
- target = sys.argv[1]
-else:
- target = "/bin/ls"
+import sys
+import binaryninja.log as log
+from binaryninja.binaryview import BinaryViewType
+import binaryninja.interaction as interaction
+from binaryninja.plugin import PluginCommand
+
+
+def get_bininfo(bv):
+ if bv is None:
+ filename = ""
+ if len(sys.argv) > 1:
+ filename = sys.argv[1]
+ else:
+ filename = interaction.get_open_filename_input("Filename:")
+ if filename is None:
+ log.log_warn("No file specified")
+ sys.exit(1)
-bv = binaryninja.BinaryViewType[bintype].open(target)
-bv.update_analysis_and_wait()
+ bv = BinaryViewType.get_view_of_file(filename)
+ log.redirect_output_to_log()
+ log.log_to_stdout(True)
-print "-------- %s --------" % target
-print "START: 0x%x" % bv.start
-print "ENTRY: 0x%x" % bv.entry_point
-print "ARCH: %s" % bv.arch.name
-print "\n-------- Function List --------"
+ contents = "## %s ##\n" % bv.file.filename
+ contents += "- START: 0x%x\n\n" % bv.start
+ contents += "- ENTRY: 0x%x\n\n" % bv.entry_point
+ contents += "- ARCH: %s\n\n" % bv.arch.name
+ contents += "### First 10 Functions ###\n"
-for func in bv.functions:
- print func.symbol.name
+ contents += "| Start | Name |\n"
+ contents += "|------:|:-------|\n"
+ for i in xrange(min(10, len(bv.functions))):
+ contents += "| 0x%x | %s |\n" % (bv.functions[i].start, bv.functions[i].symbol.full_name)
+ contents += "### First 10 Strings ###\n"
+ contents += "| Start | Length | String |\n"
+ contents += "|------:|-------:|:-------|\n"
+ for i in xrange(min(10, len(bv.strings))):
+ start = bv.strings[i].start
+ length = bv.strings[i].length
+ string = bv.read(start, length)
+ contents += "| 0x%x |%d | %s |\n" % (start, length, string)
+ return contents
-print "\n-------- First 10 strings --------"
-for i in xrange(10):
- start = bv.strings[i].start
- length = bv.strings[i].length
- string = bv.read(start,length)
- print "0x%x (%d):\t%s" % (start, length, string)
+def display_bininfo(bv):
+ interaction.show_markdown_report("Binary Info Report", get_bininfo(bv))
+
+
+if __name__ == "__main__":
+ print get_bininfo(None)
+else:
+ PluginCommand.register("Binary Info", "Display basic info about the binary", display_bininfo)