This repository was archived by the owner on May 16, 2025. It is now read-only.
File tree Expand file tree Collapse file tree 2 files changed +22
-7
lines changed
Expand file tree Collapse file tree 2 files changed +22
-7
lines changed Original file line number Diff line number Diff line change @@ -37,12 +37,18 @@ def allprocs(self):
3737 tasksaddr = self .addr_space .profile .get_symbol ("_tasks" )
3838 queue_entry = obj .Object ("queue_entry" , offset = tasksaddr , vm = self .addr_space )
3939
40- seen = [ tasksaddr ]
40+ seen = { tasksaddr : 1 }
4141
4242 for task in queue_entry .walk_list (list_head = tasksaddr ):
43- if (task .bsd_info and task .obj_offset not in seen ):
44- proc = task .bsd_info .dereference_as ("proc" )
45- yield proc
46-
47- seen .append (task .obj_offset )
43+ if task .obj_offset not in seen :
44+ seen [task .obj_offset ] = 0
45+
46+ if task .bsd_info :
47+ proc = task .bsd_info .dereference_as ("proc" )
48+ yield proc
49+ else :
50+ if seen [task .obj_offset ] > 3 :
51+ break
52+
53+ seen [task .obj_offset ] = seen [task .obj_offset ] + 1
4854
Original file line number Diff line number Diff line change @@ -1099,7 +1099,13 @@ def get_dyld_maps(self):
10991099 def get_proc_maps (self ):
11001100 map = self .task .map .hdr .links .next
11011101
1102+ seen = set ()
1103+
11021104 for i in xrange (self .task .map .hdr .nentries ):
1105+ if map .v () in seen :
1106+ break
1107+ seen .add (map .v ())
1108+
11031109 if not map :
11041110 break
11051111 yield map
@@ -1517,9 +1523,12 @@ def get_path(self):
15171523 ret = vnode
15181524 elif vnode :
15191525 path = []
1520- while vnode :
1526+ seen = set ()
1527+ while vnode and vnode .v () not in seen :
1528+ seen .add (vnode .v ())
15211529 path .append (str (vnode .v_name .dereference () or '' ))
15221530 vnode = vnode .v_parent
1531+
15231532 path .reverse ()
15241533 ret = "/" .join (path )
15251534 else :
You can’t perform that action at this time.
0 commit comments