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

VSCode中C程序读取游戏进程内存地址失败,错误码322122547求助

问题描述

我运行以下代码时,始终无法执行到"Test 2",程序返回错误码322122547。我在VSCode中运行该程序,即使以管理员权限在CMD中运行也无法解决问题。代码中指定的地址来自一个正在运行的游戏.exe文件,对应当前游戏关卡的数值。

#include <stdio.h>

int main() {
    char *address = (char*)0x004452FC;
    volatile char value;
    printf("Test 1");

    while (1) {
        value = *address;
        printf("Test 2");
        if (value == 1) {
            printf("Test 3");
            break;
        }
    }

    return 0;
}
原因分析与解决办法
  • 错误码本质:你提到的错误码实际应为3221225477(对应0xC0000005),是Windows系统的**访问违规(Access Violation)**错误。程序在执行value = *address;时直接崩溃,因此根本无法走到printf("Test 2");这一步。
  • 核心问题:你硬编码的0x004452FC是游戏进程的虚拟内存地址,这个地址仅在游戏自身的进程地址空间内有效。你的程序是独立进程,系统的内存保护机制禁止直接访问其他进程的内存空间,强行访问就会触发崩溃。
  • 解决步骤:
    1. 获取游戏进程ID(PID):通过任务管理器找到游戏进程对应的PID。
    2. 调用系统API跨进程读内存:Windows平台下需用OpenProcess打开游戏进程并获取句柄,再通过ReadProcessMemory读取目标地址的内存值,不能直接用指针访问。
    3. 权限与兼容性:打开进程时需指定PROCESS_VM_READ权限,部分带反保护机制的游戏可能需要额外处理。

示例修正代码(Windows平台):

#include <stdio.h>
#include <windows.h>

int main() {
    DWORD pid = 1234; // 替换为你的游戏进程实际PID
    HANDLE hProcess = OpenProcess(PROCESS_VM_READ, FALSE, pid);
    if (hProcess == NULL) {
        printf("无法打开进程,错误码:%d\n", GetLastError());
        return 1;
    }

    printf("Test 1\n");
    while (1) {
        char value;
        // 读取游戏进程指定地址的内存
        if (ReadProcessMemory(hProcess, (LPCVOID)0x004452FC, &value, sizeof(value), NULL)) {
            printf("Test 2\n");
            if (value == 1) {
                printf("Test 3\n");
                break;
            }
        } else {
            printf("读取内存失败,错误码:%d\n", GetLastError());
            break;
        }
        Sleep(100); // 避免循环过度占用CPU
    }

    CloseHandle(hProcess);
    return 0;
}
  • 额外注意:
    • 游戏的虚拟地址可能随版本、ASLR(地址空间布局随机化)变化,硬编码地址不稳定,建议通过特征扫描或基地址+偏移的方式动态获取目标地址。
    • 部分游戏有反调试/反内存读取机制,可能需要进一步绕过相关限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 03:09:24