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)
head = dbg.eval("PsLoadedModuleList")
modules = dbg.walk_list("_KLDR_DATA_TABLE_ENTRY", "InLoadOrderLinks", head)
print(f"{len(modules)} loaded modules\n")
print(f" {'DllBase':>18} {'Size':>9} Name")
for m in modules:
print(f" {m.DllBase:#18x} {m.SizeOfImage:>9} {m.BaseDllName}")
if __name__ == "__main__":
main()