import ctypes
from ctypes import wintypes

PROCESS_VM_READ = 0x0010
PROCESS_QUERY_INFORMATION = 0x0400

kernel32 = ctypes.WinDLL('kernel32', use_last_error=True)
OpenProcess = kernel32.OpenProcess
OpenProcess.restype = wintypes.HANDLE
OpenProcess.argtypes = [wintypes.DWORD, wintypes.BOOL, wintypes.DWORD]

ReadProcessMemory = kernel32.ReadProcessMemory
ReadProcessMemory.restype = wintypes.BOOL
ReadProcessMemory.argtypes = [wintypes.HANDLE, wintypes.LPCVOID, wintypes.LPVOID, ctypes.c_size_t, ctypes.POINTER(ctypes.c_size_t)]

CloseHandle = kernel32.CloseHandle
CloseHandle.restype = wintypes.BOOL
CloseHandle.argtypes = [wintypes.HANDLE]

pid = 39484
h_proc = OpenProcess(PROCESS_VM_READ | PROCESS_QUERY_INFORMATION, False, pid)

for rva_name, addr in [("Clamp1", 0x7FF6B24456A9), ("Clamp2", 0x7FF6B2446927)]:
    buf = ctypes.create_string_buffer(64)
    bytes_read = ctypes.c_size_t(0)
    # Read from addr - 16 to addr + 48
    start = addr - 16
    if ReadProcessMemory(h_proc, ctypes.c_void_p(start), buf, 64, ctypes.byref(bytes_read)):
        raw = bytes(buf)
        print(f"=== {rva_name} @ 0x{addr:X} ===")
        print("Raw hex:", ' '.join(f'{b:02X}' for b in raw))
    else:
        print(f"Failed to read {rva_name}")

CloseHandle(h_proc)
