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

Python使用ReadWriteMemory读Rust游戏血量指针报OverflowError如何解决

问题解决方法

报错原因

报错int too long to convert是因为你使用的ReadWriteMemory库默认适配32位进程地址,而Rust是64位游戏,你计算出的基地址数值超过了32位整数的上限(0xFFFFFFFF),传入Windows API调用时触发了类型溢出。

修复步骤

  • 不要硬编码游戏模块基址:0x7FF78DED0000是RustClient.exe本次启动的临时基址,每次重启游戏都会变化,需要动态获取进程的模块基址再相加静态偏移。
  • 更换为对64位进程支持更好的pymem库,避免类型转换问题。
  • 注意:Rust自带EAC反作弊,仅可在离线单机、无反作弊的私服测试,正式服运行会直接触发封禁。

修复后代码

# 先安装依赖:pip install pymem
from pymem import Pymem
from pymem.process import module_from_name

# 关联游戏进程
pm = Pymem("RustClient.exe")
# 动态获取RustClient.exe模块基址
game_module = module_from_name(pm.process_handle, "RustClient.exe").lpBaseOfDll
# 计算基地址
base_address = game_module + 0x305CAE8
# 指针偏移
offsets = [0xB0, 0xB20, 0x224]

while True:
    # 逐次遍历偏移得到最终血量地址
    temp_addr = pm.read_ulonglong(base_address)
    for offset in offsets[:-1]:
        temp_addr = pm.read_ulonglong(temp_addr + offset)
    health_addr = temp_addr + offsets[-1]
    # 读取血量(Rust血量为float浮点类型)
    health = pm.read_float(health_addr)
    print(f"当前血量:{health}")

额外说明

如果坚持要使用原来的ReadWriteMemory库,可以手动修改库的__init__.py文件中的read方法,把lp_base_address参数强制转换为ctypes.c_uint64类型,即可解决溢出问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 02:36:00