def lines(self): count = ctypes.c_ulonglong(0) lines = core.BNGetLinearViewCursorLines(self.handle, count) result = [] for i in range(0, count.value): func = None block = None if lines[i].function: func = binaryninja.function.Function( self, core.BNNewFunctionReference(lines[i].function)) if lines[i].block: block = binaryninja.basicblock.BasicBlock( core.BNNewBasicBlockReference(lines[i].block), self) color = highlight.HighlightColor._from_core_struct( lines[i].contents.highlight) addr = lines[i].contents.addr tokens = binaryninja.function.InstructionTextToken.get_instruction_lines( lines[i].contents.tokens, lines[i].contents.count) contents = binaryninja.function.DisassemblyTextLine(tokens, addr, color=color) result.append( LinearDisassemblyLine(lines[i].type, func, block, contents)) core.BNFreeLinearDisassemblyLines(lines, count.value) return result
def _function_action(cls, view, func, action): try: file_metadata = binaryninja.filemetadata.FileMetadata(handle = core.BNGetFileForView(view)) view_obj = binaryninja.binaryview.BinaryView(file_metadata = file_metadata, handle = core.BNNewViewReference(view)) func_obj = function.Function(view_obj, core.BNNewFunctionReference(func)) action(view_obj, func_obj) except: binaryninja.log.log_error(traceback.format_exc())
def _set_current_function(self, ctxt, func): try: if func: func = binaryninja.function.Function(handle = core.BNNewFunctionReference(func)) else: func = None self.perform_set_current_function(func) except: log.log_error(traceback.format_exc())
def _get_incoming_flag_value(self, ctxt, reg, func, result): try: func_obj = binaryninja.function.Function(handle = core.BNNewFunctionReference(func)) reg_name = self.arch.get_reg_name(reg) api_obj = self.perform_get_incoming_flag_value(reg_name, func_obj)._to_api_object() except: log.log_error(traceback.format_exc()) api_obj = binaryninja.function.RegisterValue()._to_api_object() result[0].state = api_obj.state result[0].value = api_obj.value
def _recognize_medium_level_il(self, ctxt, data, func, il): try: file_metadata = filemetadata.FileMetadata(handle = core.BNGetFileForView(data)) view = binaryview.BinaryView(file_metadata = file_metadata, handle = core.BNNewViewReference(data)) func = function.Function(view, handle = core.BNNewFunctionReference(func)) il = mediumlevelil.MediumLevelILFunction(func.arch, handle = core.BNNewMediumLevelILFunctionReference(il)) return self.recognize_medium_level_il(view, func, il) except: log.log_error(traceback.format_exc()) return False
def _function_is_valid(cls, view, func, is_valid): try: if is_valid is None: return True file_metadata = binaryninja.filemetadata.FileMetadata(handle = core.BNGetFileForView(view)) view_obj = binaryninja.binaryview.BinaryView(file_metadata = file_metadata, handle = core.BNNewViewReference(view)) func_obj = function.Function(view_obj, core.BNNewFunctionReference(func)) return is_valid(view_obj, func_obj) except: binaryninja.log.log_error(traceback.format_exc()) return False
def _get_parameter_var_for_incoming_var(self, ctxt, in_var, func, result): try: if func is None: func_obj = None else: func_obj = binaryninja.function.Function(handle = core.BNNewFunctionReference(func)) in_var_obj = binaryninja.function.Variable(func_obj, in_var[0].type, in_var[0].index, in_var[0].storage) out_var = self.perform_get_parameter_var_for_incoming_var(in_var_obj, func_obj) result[0].type = out_var.source_type result[0].index = out_var.index result[0].storage = out_var.storage except: log.log_error(traceback.format_exc()) result[0].type = in_var[0].type result[0].index = in_var[0].index result[0].storage = in_var[0].storage