Windows の ReadProcessMemory の使い方
Windows では、ReadProcessMemory 関数を使って他のプロセスのメモリデータを読み取ることができます。ReadProcessMemory 関数を使用するための一般的な手順は次のとおりです。
- ヘッダファイルのインクルード
#include <iostream>
#include <Windows.h>
- 対象プロセスのハンドを取得する。
HANDLE hProcess = OpenProcess(PROCESS_VM_READ, FALSE, processId);
プロセスIDは対象とするプロセスのプロセスIDです。
- 読み取ったデータを格納するバッファを定義する。
BYTE buffer[SIZE];
SIZEはバッファサイズであり、必要に応じて調整する
- ReadProcessMemory関数を使って、対象のプロセスのメモリデータを取得する
BOOL result = ReadProcessMemory(hProcess, (LPCVOID)address, buffer, SIZE, NULL);
アドレスは読み込まれるメモリアドレスで、バッファは読み込まれたデータを格納するためのバッファ、サイズは読み込まれるデータのサイズです。
- 対象プロセスのハンドルを閉じる:
CloseHandle(hProcess);
完全なサンプルコードは次のとおりです。
#include <iostream>
#include <Windows.h>
int main()
{
DWORD processId = 0; // 目标进程的进程ID
DWORD address = 0; // 要读取的内存地址
const int SIZE = 1024; // 缓冲区大小
// 获取目标进程的句柄
HANDLE hProcess = OpenProcess(PROCESS_VM_READ, FALSE, processId);
if (hProcess == NULL)
{
std::cout << "Failed to open process!" << std::endl;
return 1;
}
// 定义缓冲区
BYTE buffer[SIZE];
// 读取目标进程的内存数据
BOOL result = ReadProcessMemory(hProcess, (LPCVOID)address, buffer, SIZE, NULL);
if (result == FALSE)
{
std::cout << "Failed to read process memory!" << std::endl;
}
else
{
// 打印读取的数据
for (int i = 0; i < SIZE; i++)
{
std::cout << std::hex << (int)buffer[i] << " ";
}
std::cout << std::endl;
}
// 关闭目标进程的句柄
CloseHandle(hProcess);
return 0;
}
ReadProcessMemory 関数を使用するには管理者権限が必要であることに注意してください。