LA_DAN 2020-01-08 10:28 采纳率: 0%
浏览 245

C++ 获取基址返回值一直为0

基址为:DWORD address = 0x13F4C34D7

使用ReadProcessMemory获取后返回值一直为0
使用控制台打印出来的address值为:1061958871

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-07-26 17:55
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    这个问题可能是因为在调用ReadProcessMemory函数时,没有正确地传递参数。ReadProcessMemory函数的第二个参数是地址范围,而你只提供了单个的内存地址。

    要解决这个问题,你需要提供一个完整的地址范围,包括开始和结束地址。例如:

    unsigned int start_address = 0x13F4C34D7;
    unsigned int end_address = 0x13F4C34D7 + 4; // 4 bytes for the DWORD value
    DWORD buffer[2]; // Allocate a buffer to store the result
    if (VirtualQueryEx(hProcess, start_address, &buffer, sizeof(buffer)) == 0) {
        printf("Failed to read memory\n");
    } else if (buffer[0] != 0) {
        printf("Value at %p is 0x%08X\n", start_address, buffer[0]);
    }
    

    这段代码首先计算了内存地址范围,然后使用VirtualQueryEx函数读取了这个范围内的内存。如果成功,它将返回第一个字节的值;否则,它将输出错误信息。

    注意,这个例子中的hProcess变量应该已经被初始化,并且包含了一个有效的进程句柄。如果你没有这样做,你需要添加相应的代码来创建和初始化这个变量。

    评论

报告相同问题?