from xnu import * """ Recursive ipc importance chain viewing macro. This file incorporates complex python datastructures interspersed with cvalue based objects from lldb interface. """ class TaskNode(object): def __init__(self, task_kobj): self.task = task_kobj self.importance_refs = [] @staticmethod def GetHeaderString(): return GetTaskSummary.header + " " + GetProcSummary.header + " {: <18s}".format("task_imp_base") def __str__(self): out_arr = [] if unsigned(self.task) != 0: out_arr.append(GetTaskSummary(self.task) + " " + GetProcSummary(Cast(self.task.bsd_info, 'proc *')) + " {: <#018x}".format(self.task.task_imp_base) ) else: out_arr.append("Unknown task.") #out_arr.append("TASK: {: <#018x} {: """ print ' ' + GetIPCImportantTaskSummary.header + ' ' + GetIPCImportanceElemSummary.header for task in kern.tasks: if unsigned(task.task_imp_base): print " " + GetIPCImportantTaskSummary(task.task_imp_base) + ' ' + GetIPCImportanceElemSummary(addressof(task.task_imp_base.iit_elem)) base_node = IIINode(Cast(task.task_imp_base, 'ipc_importance_inherit *'), None) GetIIIListFromIIE(task.task_imp_base.iit_elem, base_node) print base_node.GetChildSummaries(prefix="\t\t") print "\n\n ======================== TASK REVERSE CHAIN OF IMPORTANCES =========================" print TaskNode.GetHeaderString() for k in AllTasksCollection.keys(): t = AllTasksCollection[k] print "\n" + str(t)