You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pymem提示无法找到GameAssembly.dll进程但Cheat Engine可识别该如何解决

问题根因

pymem.Pymem() 构造函数接收的参数是游戏主程序的exe进程名,而非进程内加载的dll模块名。你传入的GameAssembly.dll是Unity游戏运行时加载的核心模块,不是独立进程,因此触发进程未找到的报错。你在Cheat Engine里是先选中了游戏主进程,之后才能看到该dll模块,二者逻辑是一致的。

修复步骤
  • 第一步:替换Pymem初始化参数,打开任务管理器找到对应游戏的主进程exe名称(例:YuanShen.exe、StarRail.exe、Among Us.exe等),替换初始化参数
  • 第二步:修复代码笔误,GetPointerAddress 函数中循环读取地址时误用了未定义的addr变量,和之前定义的address变量名不一致
  • 第三步:适配进程架构,若你运行的是64位游戏,内存地址长度为8字节,需使用read_longlong替代read_int读取地址,避免地址截断
  • 第四步:运行脚本时确保以管理员权限启动Python环境,避免权限不足无法读取进程内存
修复后代码示例
from pymem import *
from pymem.process import *

# 替换为你的游戏主进程exe名称
pm = pymem.Pymem("你的游戏进程名.exe")
gameModule = module_from_name(pm.process_handle, "GameAssembly.dll").lpBaseOfDll

def GetPointerAddress(base, offsets):
    # 64位进程用read_longlong,32位保留read_int即可
    address = pm.read_longlong(base)
    for index, offset in enumerate(offsets):
        if index != len(offsets) - 1:
            address = pm.read_longlong(address + offset)
        else:
            address += offset
    return address

offset = 0x023BC200
offsets = [0x50, 0xB8, 0x0, 0xB8, 0x10, 0x230, 0x18, 0x30, 0x10, 0x28]

while True:
    # 若读取的数值是4字节int保留read_int,8字节数值改为read_longlong即可
    output = pm.read_int(GetPointerAddress(gameModule + offset, offsets))
    print(output)
替代实现方案

如果pymem仍有兼容性问题,可以选择以下方案实现:

  • 直接使用ctypes调用Windows原生API OpenProcess、ReadProcessMemory、GetModuleBaseAddress实现内存读取,无需依赖第三方库
  • 使用pywin32模块调用Windows系统接口实现进程内存操作,语法比原生ctypes更简洁
  • 直接复用Cheat Engine的Lua脚本实现内存读写,适合已经在CE中完全调试通指针逻辑的场景

内容的提问来源于stack exchange,提问作者Alexander Jephtha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 19:36:00