"""probe_physobj_size.py Find density/spacing of CPhysicsObj instances in the dump. Spec says 90 leaked + many live ones in CObjectMaint's hash. """ import struct, sys from minidump.minidumpfile import MinidumpFile from collections import Counter PHYS_VT = 0x007c78ec def _ei(v): if v is None: return 0 if hasattr(v, 'value'): return int(v.value) return int(v) md = MinidumpFile.parse(sys.argv[1]) reader = md.get_reader().get_buffered_reader() scan = [] for r in md.memory_info.infos: st, ty, pr = _ei(r.State), _ei(r.Type), _ei(r.Protect) & 0xff if st != 0x1000 or ty == 0x1000000 or pr not in (0x04, 0x40): continue scan.append((r.BaseAddress, r.RegionSize)) addrs = [] for base, size in scan: try: reader.move(base); buf = reader.read(size) except Exception: continue if not buf: continue end = (len(buf) // 4) * 4 for off in range(0, end - 4, 4): if struct.unpack_from("6}) x{n}")