import ctypes
import struct

k32 = ctypes.windll.kernel32
pid = 43084
h = k32.OpenProcess(0x10 | 0x400, False, pid)
ingame = 0x2AF3CDF0558
br = ctypes.c_size_t()
buf = (ctypes.c_char * 0x480)()
k32.ReadProcessMemory(h, ctypes.c_void_p(ingame), buf, 0x480, ctypes.byref(br))
raw = bytes(buf)

for off in range(0, 0x480, 8):
    val = struct.unpack_from("<Q", raw, off)[0]
    if 0x10000 <= val <= 0x7FFFFFFFFFFF:
        sbuf = (ctypes.c_char * 64)()
        if k32.ReadProcessMemory(h, ctypes.c_void_p(val), sbuf, 64, ctypes.byref(br)):
            b = bytes(sbuf)
            q0 = struct.unpack_from("<Q", b, 0)[0]
            w = ""
            for i in range(0, 32, 2):
                wc = struct.unpack_from("<H", b, i)[0]
                if 0x20 <= wc <= 0x7E: w += chr(wc)
                elif wc == 0: break
            s = ""
            for c in b[:32]:
                if 0x20 <= c <= 0x7E: s += chr(c)
                elif c == 0: break
            tag = f'w="{w}"' if len(w)>=3 else (f's="{s}"' if len(s)>=3 else f'q0=0x{q0:X}')
            print(f"+0x{off:03X}: 0x{val:012X} -> {tag}")

k32.CloseHandle(h)
