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

使用Pymem读取浮点值报错:Address must be int问题求助

问题原因

你错误地用read_float读取内存指针地址了——内存地址是整数类型,而read_float会返回浮点数值,导致后续计算出的地址变成浮点数(比如报错里的1994287160.0),传给要求整数地址的函数时触发类型错误。

内存指针的存储类型是整数,只有最终要读取的目标值(比如你要的northsouth坐标)才是浮点,指针链的每一步都应该用读取整数的函数。

修正方案

根据游戏进程的位数选择对应的整数读取函数:

  • 32位进程:用pm.read_int()
  • 64位进程:用pm.read_ulonglong()

修正后的代码示例(假设是32位游戏,64位的话替换read_int为read_ulonglong):

from pymem import *
from pymem.process import *

pm = pymem.Pymem("game.exe")

module = module_from_name(pm.process_handle, "game.exe").lpBaseOfDll

def GetPtrAddr(base, offsets):
    # 指针是整数,用read_int读取(64位用read_ulonglong)
    addr = pm.read_int(base)
    for i in offsets[:-1]:  # 遍历除最后一个偏移外的所有值
        addr = pm.read_int(addr + i)
    return addr + offsets[-1]

northsouth_addr = GetPtrAddr(module + 0x01B20C50, [0x38, 0x60, 0x290, 0x68, 0x140, 0x0, 0x3C])
# 最后读取浮点值
print(pm.read_float(northsouth_addr))
关键修正点
  • 指针链读取修正:把read_float换成read_int/read_ulonglong,保证地址始终是整数类型
  • 循环逻辑优化:直接遍历offsets[:-1],无需判断是否为最后一个元素,代码更简洁
  • 变量命名优化:将northsouth改为northsouth_addr,明确这是存储浮点值的地址,而非浮点值本身

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 20:10:43