From a6842fc4209ed0bc160222ee61b2e6d9741dc9ef Mon Sep 17 00:00:00 2001 From: plafosse Date: Mon, 31 Oct 2016 16:06:34 -0400 Subject: Refactoring and other improvements of the python api --- python/examples/bin_info.py | 66 +++++++++++++++++++++++++++------------------ 1 file changed, 40 insertions(+), 26 deletions(-) (limited to 'python/examples/bin_info.py') diff --git a/python/examples/bin_info.py b/python/examples/bin_info.py index a472495a..c574a530 100644 --- a/python/examples/bin_info.py +++ b/python/examples/bin_info.py @@ -20,37 +20,51 @@ # IN THE SOFTWARE. import sys -import binaryninja +import binaryninja.log as log +import binaryninja.binaryview as view +import binaryninja.interaction as interaction +from binaryninja.plugin import PluginCommand -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) -if len(sys.argv) > 1: - target = sys.argv[1] -else: - target = "/bin/ls" +def 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 = view.BinaryViewType.get_view_of_file(filename) + log.redirect_output_to_log() + log.log_to_stdout(True) -log.log_info("-------- %s --------" % target) -log.log_info("START: 0x%x" % bv.start) -log.log_info("ENTRY: 0x%x" % bv.entry_point) -log.log_info("ARCH: %s" % bv.arch.name) -log.log_info("\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: - log.log_info(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) -log.log_info("\n-------- First 10 strings --------") + interaction.show_markdown_report("Binary Info Report", contents) -for i in xrange(10): - start = bv.strings[i].start - length = bv.strings[i].length - string = bv.read(start, length) - log.log_info("0x%x (%d):\t%s" % (start, length, string)) + +if __name__ == "__main__": + bininfo(None) +else: + PluginCommand.register("Binary Info", "Display basic info about the binary", bininfo) -- cgit v1.3.1