Esempio n. 1
0
 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()
Esempio n. 2
0
 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
Esempio n. 3
0
 def set_name(self, value):
     return idc.SetStrucName(self.sid, value)
Esempio n. 4
0
def name(id, name=None):
    if name is None:
        return idc.GetStrucName(id)
    return idc.SetStrucName(id, name)
Esempio n. 5
0
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