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
相关产品推荐
相关产品推荐

