예제 #1
0
파일: utils.py 프로젝트: Midi12/SusanRTTI
 def xref_or_find(self, addr, allow_many=False):
     lrefs = list(DataRefsTo(addr))
     if len(lrefs) == 0:
         lrefs = list(idautils.refs(addr, self.ptrfirst, self.ptrnext))
     if len(lrefs) > 1 and not allow_many:
         print("too many xrefs to %08X" % addr)
         return []
     lrefs = [r for r in lrefs if not isCode(get_full_flags(r))]
     return lrefs
예제 #2
0
def _update_from_ptr(ptr, struc, track_members):
    for xref in map(lambda x: Instruction(x), DataRefsTo(ptr.addr)):
        if xref.mnem == "mov" and xref[0].type == o_reg and xref[1].type == o_mem:
            if xref[0].type == o_reg:
                print("Working on xref: %s" % xref)
                track = start_track(
                    next_addr(xref.ea),
                    {xref[0].reg: struc},
                    types_to_track=(Register, Structure, StructureMember, Pointer),
                    allow_members=True,
                )
                _update_structs_from_track(track)
            else:
                print("Skipping xref: %s" % xref)