def rename(self, nuname=None, **kwargs): tp = self.currentType(**kwargs) cnm = tp['name'] if not nuname: nuname = idc.AskStr(cnm, "Set new type name for " + cnm + ":") if not nuname or nuname == cnm: Logger.debug("Rename cancelled") return sid = idc.GetStrucIdByName(nuname) if sid and sid != idc.BADADDR: raise self.WrongTypeError("Type already exists", nuname) Logger.debug("Renaming class %s to %s", str(tp), nuname) if tp.get('vtblea'): idc.MakeName(tp['vtblea'], 'vtbl_' + nuname) if tp.get('id'): idc.SetStrucName(tp['id'], nuname) if tp.get('vtblid'): tp['vtblnm'] = nuname + 'Vtbl' idc.SetStrucName(tp['vtblid'], tp['vtblnm']) for nm in idautils.Names(): if nm[1].startswith(cnm): fn = nm[1].replace(cnm, nuname) Logger.debug("Renaming function " + nm[1] + " to " + fn) idc.MakeName(nm[0], fn) self.typeid = nuname self.update()
def getTypeVtbl(self, descr): if not descr.get('id'): return descr mid = idc.GetMemberId(descr['id'], 0) if not mid or mid == idc.BADADDR: return descr t = idc.GetType(mid) or '' t = t.replace('*', '').replace(' ', '') if 'VTABLE' not in t: return descr svid = idc.GetStrucIdByName(t) if not svid or svid == idc.BADADDR: return descr idc.SetStrucName(svid, descr['name'] + 'Vtbl') descr['vtblid'] = svid descr['vtblnm'] = descr['name'] + 'Vtbl' return descr
def set_name(self, value): return idc.SetStrucName(self.sid, value)
def name(id, name=None): if name is None: return idc.GetStrucName(id) return idc.SetStrucName(id, name)
def dispatch(args): ## dispatch args.... class A(): pass a = A() for name in args: setattr(a, name, args[name]) del args ### dispatch idp events if a.action == 'rename': debug('[*] renaming %s to %s @ %x', a.old_name, a.new_name, a.ea) idc.MakeNameEx(a.ea, str(a.new_name), idaapi.SN_NOWARN) return ## dispatch idb events if a.action == 'cmt_changed': if not a.cmt: a.cmt = '' _pcmt = a.cmt if len(a.cmt) < 10 else a.cmt[:10] + '...' debug('[*] cmt changed @ %X (rep:%s) - %s', a.ea, a.rep, _pcmt) if a.rep: idc.MakeRptCmt(a.ea, str(a.cmt)) else: idc.MakeComm(a.ea, str(a.cmt)) if a.action == 'struct_created': debug('[*] Struct %s created with id %x', a.sname, a.struct) print idc.AddStrucEx(-1, str(a.sname), a.union) if a.action == 'struct_deleted': sid = idc.GetStrucId(a.struct) sname = idc.GetStrucName(sid) debug('[*] Struct(%x) %s deleted', a.struct, sname) idc.DelStruc(sid) if a.action == 'struct_renamed': sid = idc.GetStrucId(a.struct) sname = idc.GetStrucName(sid) debug('[*] Struct(%d - %x) renamed from %s to %s', a.struct, sid, sname, a.sname) idc.SetStrucName(sid, str(a.sname)) if a.action == 'struct_cmt_changed': sid = idc.GetStrucId(a.struct) debug('[*] Struct(%d - %x) %s - cmt changed', a.struct, sid, a.sname) idc.SetStrucComment(sid, a.cmt, 0) if a.action == 'struct_expanded': pass if a.action == 'struct_member_created': pass if a.action == 'struct_member_deleted': pass if a.action == 'struct_member_renamed': pass if a.action == 'struct_member_changed': pass if a.action == 'struct_member_': pass if a.action == 'struct_member_created': pass if a.action == 'struct_member_created': pass # if a.action == 'struct_expanded': # debug(' return 0