Skip to content

Instantly share code, notes, and snippets.

@alexander-hanel
Last active August 24, 2022 19:15
Show Gist options
  • Save alexander-hanel/982b66bade6e32f9259b9b7f55aea322 to your computer and use it in GitHub Desktop.
Save alexander-hanel/982b66bade6e32f9259b9b7f55aea322 to your computer and use it in GitHub Desktop.
Explore Binary Ninja's Python API
import logging
logging.basicConfig()
logging.getLogger().setLevel(logging.DEBUG)
file_name = ""
try:
import binaryninja
logging.debug("BinaryNinja has been imported")
except ModuleNotFoundError:
logging.critical("BinaryNinja module is not installed.")
exit()
with binaryninja.open_view(file_name) as bv:
print("bv.address_comments, %s" % (bv.address_comments))
print("bv.address_size, %s" % (bv.address_size))
print("bv.allocated_ranges, %s" % (bv.allocated_ranges))
print("bv.analysis_changed, %s" % (bv.analysis_changed))
print("bv.analysis_info, %s" % (bv.analysis_changed))
print("bv.analysis_progress, %s" % (bv.analysis_progress))
print("bv.arch %s " % (bv.arch))
print("bv.available_view_types %s" % (bv.available_view_types))
print("bv.basic_blocks, type: Generator")
for cc, gg in enumerate(bv.basic_blocks):
print("\tbasic block:", gg)
print ("\tbasic block instances:", [tt for tt in dir(gg) if "__" not in tt])
if cc == 3:
break
print("bv.data_tags, %s" % (bv.data_tags))
print("bv.data_vars, %s" % (bv.data_vars))
print("bv.end, %s" % (bv.end))
print("bv.endianness, %s" % (bv.endianness))
print("bv.entry_function, %s" % (bv.entry_function))
print("bv.entry_point, %s" % (bv.entry_point))
print("bv.executable, %s" % (bv.executable))
# print("dir(bv.file), %s ") % (dir(bv.file))
# print("bv.file.filename, %s" % (bv.file.filename))
print("bv.functions, %s" % (bv.functions))
for cc, gg in enumerate(bv.functions):
print("\tfunctions:", gg)
print ("\tfunctions instance:", [tt for tt in dir(gg) if "__" not in tt])
if cc == 3:
break
print("bv.global_pointer_value, %s" % (bv.global_pointer_value))
print("bv.has_data_variables, %s" % (bv.has_data_variables))
print("bv.has_database, %s" % (bv.has_database))
print("bv.has_functions, %s" % (bv.has_functions))
print("bv.has_symbols, %s" % (bv.has_symbols))
print("bv.hlil_basic_blocks, %s" % (bv.hlil_basic_blocks))
print("v.hlil_basic_blocks, %s" % (bv.hlil_basic_blocks))
print("bv.hlil_instructions, %s" % (bv.hlil_instructions))
print("bv.instructions, %s" % (bv.instructions))
print("bv.linear_disassembly, %s" % (bv.linear_disassembly))
for cc, gg in enumerate(bv.linear_disassembly):
print("\tlinear_disassembly:", gg)
print ("\tlinear_disassembly instance:", [tt for tt in dir(gg) if "__" not in tt])
if cc == 3:
break
print("bv.llil_basic_blocks, %s" % (bv.llil_basic_blocks))
for cc, gg in enumerate(bv.llil_basic_blocks):
print("\tllil_basic_blocks:", gg)
print ("\tllil_basic_blocks instance:", [tt for tt in dir(gg) if "__" not in tt])
if cc == 3:
break
print("bv.llil_instructions, %s" % (bv.llil_basic_blocks))
for cc, gg in enumerate(bv.llil_basic_blocks):
print("\tllil_basic_blocks:", gg)
print ("\tllil_basic_blocks instance:", [tt for tt in dir(gg) if "__" not in tt])
if cc == 3:
break
print("bv.long_name, %s" % (bv.long_name))
print("bv.llil_instructions, %s" % (bv.llil_instructions))
for cc, gg in enumerate(bv.llil_instructions):
print("\tllil_instructions:", gg)
print ("\tllil_instructions instance:", [tt for tt in dir(gg) if "__" not in tt])
if cc == 3:
break
print("bv.long_name, %s" % (bv.long_name))
print("bv.max_function_size_for_analysis, %s" % (bv.max_function_size_for_analysis))
print("bv.mlil_basic_blocks, %s" % (bv.mlil_basic_blocks))
for cc, gg in enumerate(bv.mlil_basic_blocks):
print("\tmlil_basic_blocks:", gg)
print ("\tmlil_basic_blocks instance:", [tt for tt in dir(gg) if "__" not in tt])
if cc == 3:
break
print("bv.mlil_instructions, %s" % (bv.mlil_instructions))
for cc, gg in enumerate(bv.llil_basic_blocks):
print("\tmlil_instructions:", gg)
print ("\tmlil_instructions instance:", [tt for tt in dir(gg) if "__" not in tt])
if cc == 3:
break
print("bv.modified), %s" % (bv.modified))
print("bv.name, %s" % (bv.name))
print("bv.namespaces, %s" % (bv.namespaces))
print("bv.new_auto_function_analysis_suppressed, %s" % (bv.new_auto_function_analysis_suppressed))
# print("bv.next_address, %s" % (bv.next_address))
# print("bv.notifications, %s" % (bv.notifications))
print("bv.offset, %s" % (bv.offset))
print("bv.parameters_for_analysis, %s" % (bv.parameters_for_analysis))
print("bv.parent_view, %s" % (bv.parent_view))
print("bv.platform, %s" % (bv.platform))
print("bv.registered_view_type, %s" % (bv.registered_view_type))
print("bv.relocatable, %s" % (bv.relocatable))
print("bv.relocation_ranges, %s" % (bv.relocation_ranges))
print("bv.saved, %s" % (bv.saved))
print("bv.sections, %s" % (bv.sections))
print("v.segments), %s" % (bv.segments))
print("bv.session_data, %s" % (bv.session_data))
print("bv.start, 0x%x" % (bv.start))
print("bv.strings, %s" % (bv.strings))
print("bv.symbols, %s" % (bv.symbols))
print("bv.tag_types, %s" % (bv.tag_types))
print("bv.type_libraries, %s" % (bv.type_libraries))
print("bv.type_names, %s" % (bv.type_names))
print("bv.types, %s" % (bv.types))
print("bv.view_type, %s" % (bv.view_type))
@alexander-hanel
Copy link
Author

Basic Blocks

for block in current_function.basic_blocks:
       print("%d -> 0x%x" % (block.index+1, block.start))

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment