在Windows中,WriteProcessMemory函數用于向指定進程的內存中寫入數據。該函數的聲明如下:
BOOL WriteProcessMemory(
HANDLE hProcess,
LPVOID lpBaseAddress,
LPCVOID lpBuffer,
SIZE_T nSize,
SIZE_T *lpNumberOfBytesWritten
);
參數說明:
使用WriteProcessMemory函數的一般步驟如下:
下面是一個簡單的示例代碼,演示了如何使用WriteProcessMemory函數向目標進程的內存中寫入數據:
#include <Windows.h>
#include <iostream>
int main()
{
// 打開目標進程,獲取句柄
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, <目標進程ID>);
if (hProcess == NULL)
{
std::cout << "Failed to open process!" << std::endl;
return 1;
}
// 分配內存緩沖區,存儲要寫入的數據
int value = 123;
LPVOID lpBuffer = VirtualAllocEx(hProcess, NULL, sizeof(int), MEM_COMMIT, PAGE_READWRITE);
if (lpBuffer == NULL)
{
std::cout << "Failed to allocate memory in target process!" << std::endl;
CloseHandle(hProcess);
return 1;
}
// 將要寫入的數據復制到緩沖區中
if (!WriteProcessMemory(hProcess, lpBuffer, &value, sizeof(int), NULL))
{
std::cout << "Failed to write process memory!" << std::endl;
VirtualFreeEx(hProcess, lpBuffer, sizeof(int), MEM_RELEASE);
CloseHandle(hProcess);
return 1;
}
// 釋放內存緩沖區
VirtualFreeEx(hProcess, lpBuffer, sizeof(int), MEM_RELEASE);
// 關閉目標進程句柄
CloseHandle(hProcess);
return 0;
}
請注意,使用WriteProcessMemory函數時需要有足夠的權限來訪問目標進程的內存。在使用該函數之前,可能需要使用OpenProcess函數打開目標進程,以獲取足夠的訪問權限。另外,還要確保目標進程沒有以管理員權限運行,否則可能會出現訪問權限問題。