def _set_current_function(self, ctxt, func): try: if func: func = function.Function(binaryview.BinaryView(handle = core.BNGetFunctionData(func)), core.BNNewFunctionReference(func)) else: func = None self.perform_set_current_function(func) except: log.log.log_error(traceback.format_exc())
def _set_current_binary_view(self, ctxt, view): try: if view: view = binaryview.BinaryView(handle = core.BNNewViewReference(view)) else: view = None self.perform_set_current_binary_view(view) except: log.log_error(traceback.format_exc())
def _show_html_report(self, ctxt, view, title, contents, plaintext): try: if view: view = binaryview.BinaryView(handle = core.BNNewViewReference(view)) else: view = None self.show_html_report(view, title, contents, plaintext) except: log.log_error(traceback.format_exc())
def get_view_of_type(self, name): view = core.BNGetFileViewOfType(self.handle, str(name)) if view is None: view_type = core.BNGetBinaryViewTypeByName(str(name)) if view_type is None: return None view = core.BNCreateBinaryViewOfType(view_type, self.raw.handle) if view is None: return None return binaryview.BinaryView(file_metadata=self, handle=view)
def _address_action(cls, view, addr, action): try: file_metadata = filemetadata.FileMetadata( handle=core.BNGetFileForView(view)) view_obj = binaryview.BinaryView( file_metadata=file_metadata, handle=core.BNNewViewReference(view)) action(view_obj, addr) except: log.log_error(traceback.format_exc())
def _get_incoming_flag_value(self, ctxt, reg, func, result): try: func_obj = function.Function(binaryview.BinaryView(handle = core.BNGetFunctionData(func)), 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 = function.RegisterValue()._to_api_object() result[0].state = api_obj.state result[0].value = api_obj.value
def _function_action(cls, view, func, action): try: file_metadata = filemetadata.FileMetadata( handle=core.BNGetFileForView(view)) view_obj = 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: log.log_error(traceback.format_exc())
def open_existing_database(self, filename, progress_func=None): if progress_func is None: view = core.BNOpenExistingDatabase(self.handle, str(filename)) else: view = core.BNOpenExistingDatabaseWithProgress( self.handle, str(filename), None, ctypes.CFUNCTYPE(None, ctypes.c_void_p, ctypes.c_ulonglong, ctypes.c_ulonglong) (lambda ctxt, cur, total: progress_func(cur, total))) if view is None: return None return binaryview.BinaryView(file_metadata=self, handle=view)
def _range_is_valid(cls, view, addr, length, is_valid): try: if is_valid is None: return True file_metadata = filemetadata.FileMetadata( handle=core.BNGetFileForView(view)) view_obj = binaryview.BinaryView( file_metadata=file_metadata, handle=core.BNNewViewReference(view)) return is_valid(view_obj, addr, length) except: log.log_error(traceback.format_exc()) return False
def _get_address_input(self, ctxt, result, prompt, title, view, current_address): try: if view: view = binaryview.BinaryView(handle = core.BNNewViewReference(view)) else: view = None value = self.get_address_input(prompt, title, view, current_address) if value is None: return False result[0] = value return True except: log.log_error(traceback.format_exc())
def _get_form_input(self, ctxt, fields, count, title): try: field_objs = [] for i in xrange(0, count): if fields[i].type == FormInputFieldType.LabelFormField: field_objs.append(LabelField(fields[i].prompt)) elif fields[i].type == FormInputFieldType.SeparatorFormField: field_objs.append(SeparatorField()) elif fields[i].type == FormInputFieldType.TextLineFormField: field_objs.append(TextLineField(fields[i].prompt)) elif fields[ i].type == FormInputFieldType.MultilineTextFormField: field_objs.append(MultilineTextField(fields[i].prompt)) elif fields[i].type == FormInputFieldType.IntegerFormField: field_objs.append(IntegerField(fields[i].prompt)) elif fields[i].type == FormInputFieldType.AddressFormField: view = None if fields[i].view: view = binaryview.BinaryView( handle=core.BNNewViewReference(fields[i].view)) field_objs.append( AddressField(fields[i].prompt, view, fields[i].currentAddress)) elif fields[i].type == FormInputFieldType.ChoiceFormField: choices = [] for j in xrange(0, fields[i].count): choices.append(fields[i].choices[j]) field_objs.append(ChoiceField(fields[i].prompt, choices)) elif fields[ i].type == FormInputFieldType.OpenFileNameFormField: field_objs.append( OpenFileNameField(fields[i].prompt, fields[i].ext)) elif fields[ i].type == FormInputFieldType.SaveFileNameFormField: field_objs.append( SaveFileNameField(fields[i].prompt, fields[i].ext, fields[i].defaultName)) elif fields[ i].type == FormInputFieldType.DirectoryNameFormField: field_objs.append( DirectoryNameField(fields[i].prompt, fields[i].defaultName)) else: field_objs.append(LabelField(fields[i].prompt)) if not self.get_form_input(field_objs, title): return False for i in xrange(0, count): field_objs[i]._fill_core_result(fields[i]) return True except: log.log_error(traceback.format_exc())
def _low_level_il_instruction_action(cls, view, func, instr, action): try: file_metadata = filemetadata.FileMetadata( handle=core.BNGetFileForView(view)) view_obj = binaryview.BinaryView( file_metadata=file_metadata, handle=core.BNNewViewReference(view)) owner = function.Function(view_obj, core.BNGetLowLevelILOwnerFunction(func)) func_obj = lowlevelil.LowLevelILFunction( owner.arch, core.BNNewLowLevelILFunctionReference(func), owner) action(view_obj, func_obj[instr]) except: log.log_error(traceback.format_exc())
def _set_current_basic_block(self, ctxt, block): try: if block: func = core.BNGetBasicBlockFunction(block) if func is None: block = None else: block = basicblock.BasicBlock(binaryview.BinaryView(handle = core.BNGetFunctionData(func)), core.BNNewBasicBlockReference(block)) core.BNFreeFunction(func) else: block = None self.perform_set_current_basic_block(block) except: log.log_error(traceback.format_exc())
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 = filemetadata.FileMetadata( handle=core.BNGetFileForView(view)) view_obj = 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: log.log_error(traceback.format_exc()) return False
def _medium_level_il_function_action(cls, view, func, action): try: file_metadata = filemetadata.FileMetadata( handle=core.BNGetFileForView(view)) view_obj = binaryview.BinaryView( file_metadata=file_metadata, handle=core.BNNewViewReference(view)) owner = function.Function( view_obj, core.BNGetMediumLevelILOwnerFunction(func)) func_obj = mediumlevelil.MediumLevelILFunction( owner.arch, core.BNNewMediumLevelILFunctionReference(func), owner) action(view_obj, func_obj) except: log.log_error(traceback.format_exc())
def _low_level_il_function_is_valid(cls, view, func, is_valid): try: if is_valid is None: return True file_metadata = filemetadata.FileMetadata( handle=core.BNGetFileForView(view)) view_obj = binaryview.BinaryView( file_metadata=file_metadata, handle=core.BNNewViewReference(view)) owner = function.Function(view_obj, core.BNGetLowLevelILOwnerFunction(func)) func_obj = lowlevelil.LowLevelILFunction( owner.arch, core.BNNewLowLevelILFunctionReference(func), owner) return is_valid(view_obj, func_obj) except: 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 = function.Function( binaryview.BinaryView(handle=core.BNGetFunctionData(func)), core.BNNewFunctionReference(func)) in_var_obj = 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
def raw(self): """Gets the "Raw" BinaryView of the file""" view = core.BNGetFileViewOfType(self.handle, "Raw") if view is None: return None return binaryview.BinaryView(file_metadata=self, handle=view)