''' get_recursive_xrefs: Grabs all xrefs/args going until no more xrefs exist to ScreenEA() -Cody Pierce ''' class Node: def __init__(self, parent=None): self.parent = parent self.name = None self.children = [] def exists(self, name): if name == self.name: return True for c in self.children: if c.exists(name): return True return False def dump(self, space=0, threshold=10): if space > threshold: return print (" " * space) + self.name for c in self.children: space += 1 c.dump(space) def get_xref_args(ea, p=None): name = GetFunctionName(ea) if p and p.exists(name): return None t = Node(parent=p) t.name = name xref_start = ea xref_cur = RfirstB(xref_start) while xref_cur != BADADDR: try: xref_fea = get_func(xref_cur).startEA #print "%x: %s" % (xref_fea, name) except: print "[!] Problem getting func of %x" % xref_cur return None c = get_xref_args(xref_fea, p=t) if c: t.children.append(c) #break xref_cur = RnextB(xref_start, xref_cur) return t #################################################### # # Xref Stuff # #################################################### # Ask user for filename #fh = open_save_file(ask=True) fh = None # Get xrefs ea = ScreenEA() log("Getting xrefs to %x\n" % ea, None) log("=" * 72, None) log("\n", None) t = get_xref_args(ea) log("Done.\n") t.dump() if fh: fh.close()