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

使用Pymem操作CSGO内存时报错998无法定位行,求代码修复方案

Pymem读取CSGO内存报错998修复方案

报错信息:Could not read memory at: -63746652, length: 4 - GetLastError: 998

该报错为Windows系统标准错误码,含义是内存访问无效,即你尝试读取的目标地址属于进程不可访问的地址范围。核心问题是你的代码没有对读取到的中间指针做有效性校验,且所有读取操作放在同一个try块中无法定位具体错误点。


问题根因

  • 没有校验dwLocalPlayer读取结果:如果本地玩家未加载(比如还在加载界面、未进入对局),读出来的player值为0或无效值,后续读取player + m_iCrosshairId等操作直接访问非法地址
  • 没有校验crosshairID的合法范围:CSGO中crosshairID合法范围是0~64,当准星没有对准任何玩家时crosshairID为0,此时计算(crosshairID - 1) * 0x10会得到负偏移,叠加基址后就是你报错的负地址
  • 没有校验getcrosshairTarget读取结果:如果crosshairID对应的实体不存在,读出来的指针为无效值,后续读取该指针的偏移也会触发报错
  • 所有读取操作放在同一个try块中,捕获异常后无法区分具体是哪一步读取失败
  • 原函数参数中传入的engine_pointer、player无实际作用,函数内会重新赋值覆盖

修复后代码

from Utils.Offsets import *

def GetPlayerVars(pm, client, engine):
    try:
        # 读取本地玩家指针并校验
        player = pm.read_int(client + dwLocalPlayer)
        if not player:
            print("无效本地玩家指针")
            return None
        
        # 读取engine指针并校验
        engine_pointer = pm.read_int(engine + dwClientState)
        if not engine_pointer:
            print("无效engine指针")
            return None
        
        # 读取glow管理器指针并校验
        glow_manager = pm.read_int(client + dwGlowObjectManager)
        if not glow_manager:
            print("无效glow管理器指针")
            return None
        
        # 读取本地玩家队伍编号
        localTeam = pm.read_int(player + m_iTeamNum)
        # 读取准星ID
        crosshairID = pm.read_int(player + m_iCrosshairId)
        
        # 仅crosshairID在合法范围时读取实体信息
        getcrosshairTarget = 0
        immunitygunganme = 0
        crosshairTeam = 0
        if 1 <= crosshairID <= 64:
            getcrosshairTarget = pm.read_int(client + dwEntityList + (crosshairID - 1) * 0x10)
            if getcrosshairTarget:
                immunitygunganme = pm.read_int(getcrosshairTarget + m_bGunGameImmunity)
                crosshairTeam = pm.read_int(getcrosshairTarget + m_iTeamNum)
        
        # 读取视角Y轴角度
        y_angle = pm.read_float(engine_pointer + dwClientState_ViewAngles + 0x4)
    
    except Exception as e:
        # 打印完整回溯信息定位错误行
        import traceback
        traceback.print_exc()
        return None

    return player, engine_pointer, glow_manager, crosshairID, getcrosshairTarget, immunitygunganme, localTeam, crosshairTeam, y_angle

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 20:36:08