ReadProcessMemoryでプロセス配列を読み取る問題
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関数は、対象プロセスのメモリデータを読み取るため、対象プロセスに十分な権限があることを確認する必要があります。