def s_create(): db = database.get() name = idaapi.askqstr('', 'Enter a class name') if name is None: return None if name in database.get().classes_by_name: idaapi.warning('That name is already used.') return None if not Class.s_name_is_valid(name): idaapi.warning('The class name "%s" is invalid.' % name) return None base_class = None base_name = idaapi.askqstr('', 'Enter a base class name (leave empty for none)') if base_name is None: return None if base_name: if base_name not in db.classes_by_name: idaapi.warning('The class "%s" is not in the database.' % base_name) return None else: base_class = db.classes_by_name[base_name] if not base_class.can_be_derived(): idaapi.warning('The class %s cannot be derived because the VTable is not setup correctly' % base_class.name) return None return Class(name, base_class) '''
def try_set_typedef(self, t): val = idaapi.askqstr('', 'Enter typedef value') if val is None: return val_segs = val.split() itanium_mangler.fix_multi_seg_types(val_segs) if len(val_segs) != 1 or ( val_segs[0] not in itanium_mangler.BUILTIN_TYPES and not itanium_mangler.check_identifier(val_segs[0])): idaapi.warning('That value is invalid.') return database.get().typedefs[t] = val.strip() self.update_list()
def handle_add(self): t = idaapi.askqstr('', 'Enter typedef name') if t is None: return if t in database.get().typedefs: idaapi.warning('That name is already used.') return if not itanium_mangler.check_identifier(t): idaapi.warning('That name is invalid.') return # Todo: prevent overwriting builtins self.try_set_typedef(t)
def handle_set_name(self): if self.edit_class is None: return new_name = idaapi.askqstr(self.edit_class.name, 'Enter a class name') if new_name is None or new_name == self.edit_class.name: return if new_name in database.get().classes_by_name: idaapi.warning('That name is already used.') return if not database_entries.Class.s_name_is_valid(new_name): idaapi.warning('The class name "%s" is invalid.' % new_name) return self.edit_class.rename(new_name) self.update_fields() self.parent_gui.update_class(self.edit_class)
def edit_deleted_virtual_vals(self): db = database.get() txt = idaapi.askqstr( ', '.join([('0x%X' % x) for x in db.deleted_virtual_vals]), "Enter deleted virtual values") if txt is None or not txt.strip(): return new_deleted_virtual_vals = [] for s in txt.split(','): try: new_deleted_virtual_vals.append(int(s, 0)) except ValueError: idaapi.warning( 'Parsing "%s" failed. Deleted virtual values were not modified.' % s) return db.deleted_virtual_vals = new_deleted_virtual_vals