ReadProcessMemory读取进程数组的问题

2024-01-22

ReadProcessMemory函数可以用来读取指定进程的内存数据。如果要读取进程的数组,可以通过读取数组的首地址和数组长度来实现。

以下是一个示例代码,用来读取进程的整型数组:

#include <iostream>
#include <windows.h>

int main() {
    // 获取目标进程的句柄
    DWORD pid = 1234; // 目标进程的PID
    HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
    if (hProcess == NULL) {
        std::cout << "无法打开进程" << std::endl;
        return 1;
    }

    // 设置要读取的数组的首地址和长度
    DWORD_PTR arrayAddress = 0x12345678; // 数组的首地址
    int arraySize = 10; // 数组的长度

    // 读取数组数据
    int* arrayData = new int[arraySize];
    SIZE_T bytesRead;
    BOOL success = ReadProcessMemory(hProcess, (LPCVOID)arrayAddress, arrayData, sizeof(int) * arraySize, &bytesRead);
    if (!success) {
        std::cout << "读取失败" << std::endl;
        return 1;
    }

    // 输出读取到的数组数据
    for (int i = 0; i < arraySize; i++) {
        std::cout << arrayData[i] << std::endl;
    }

    // 释放资源
    delete[] arrayData;
    CloseHandle(hProcess);

    return 0;
}

在示例代码中,首先使用OpenProcess函数打开目标进程,并获取到进程的句柄。然后设置要读取的数组的首地址和长度。接下来使用ReadProcessMemory函数读取数组数据,将读取到的数据存储在一个动态分配的整型数组中。最后输出读取到的数组数据,并释放资源。

需要注意的是,ReadProcessMemory函数读取的是目标进程的内存数据,因此需要确保目标进程有足够的权限来进行读取操作。