import argparse
import ntoseye
def main() -> None:
ap = argparse.ArgumentParser(description=__doc__)
ap.add_argument("--backend", default="memory", choices=["memory", "gdb", "kd"])
ap.add_argument("--connect", default=None)
args = ap.parse_args()
dbg = ntoseye.attach(backend=args.backend, connect=args.connect)
header = f" {'PID':>6} {'ImageFileName':<16} {'DirBase':>18} {'#Thr':>5} EPROCESS"
print(header)
for proc in sorted(dbg.processes(), key=lambda p: p.UniqueProcessId)[:12]:
image = proc.ImageFileName dir_base = proc.Pcb.DirectoryTableBase nthreads = len(proc.threads()) print(f" {proc.UniqueProcessId:>6} {image:<16} {dir_base:#18x} {nthreads:>5} {proc.addr:#x}")
if __name__ == "__main__":
main()