Python使用ReadWriteMemory时,如何引用GameAssembly.dll解决读取异常?
解决ReadWriteMemory读取Among Us GameAssembly.dll模块内存指针的问题
你的核心问题是硬编码了GameAssembly.dll的基地址(0x00350000)——这个地址不是固定的,每次游戏启动时系统会动态分配模块加载地址,直接用旧地址计算指针自然读不到正确数据。必须动态获取GameAssembly.dll在目标进程中的实际基地址,再结合偏移计算最终指针。
修改后的代码如下:
import time from ReadWriteMemory import ReadWriteMemory def main(): rwm = ReadWriteMemory() process = rwm.get_process_by_name("Among Us.exe") process.open() print(f"Process Information: {process.__dict__}") # 动态获取GameAssembly.dll模块的实际基地址 game_assembly_module = process.get_module_by_name("GameAssembly.dll") if not game_assembly_module: print("未找到GameAssembly.dll模块,请确认游戏已启动") process.close() return # 用模块实际基地址加上偏移,替代原来的硬编码基地址 base_offset = 0x01F8FD0C baseaddress_speed = game_assembly_module.base_address + base_offset speed_pointer = process.get_pointer(baseaddress_speed, offsets=[0x5C, 0x14, 0x8]) # 读取并修改速度值 current_speed = process.read(speed_pointer) print(f"Current Speed: {current_speed}") new_speed = 4 process.write(speed_pointer, new_speed) print(f"已将速度修改为: {new_speed}") process.close() if __name__ == "__main__": main()
关键修改点说明:
- 调用
process.get_module_by_name("GameAssembly.dll")获取模块对象,它的base_address属性就是模块当前加载的基地址 - 替换原来硬编码的0x00350000,改用动态获取的模块基地址加上偏移0x01F8FD0C
- 增加了模块不存在的判断,避免程序崩溃
额外注意事项:
- 确保Python环境和游戏位数一致:Among Us通常是32位程序,若使用64位Python可能无法正确读取32位进程的模块信息,建议切换到32位Python环境
- 内存修改可能触发游戏反作弊机制,使用前请确认风险
- 若偏移值(0x01F8FD0C、0x5C等)对应旧版本游戏,可能需要重新查找新版本的偏移
内容的提问来源于stack exchange,提问作者black_eye
相关产品推荐
相关产品推荐

