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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 23:55:32