首先其声明如下:
BOOL WriteProcessMemory(
HANDLE hProcess, // 进程的句柄,是用OpenProcess打开的
LPVOID lpBaseAddress, // 要写入的起始地址
LPVOID lpBuffer, // 写入的缓存区
DWORD nSize, // 要写入缓存区的大小
LPDWORD lpNumberOfBytesWritten // 这个是返回实际写入的字节。
);
如果你要改写目标进程的一段内存,可以类似这样
char *buffer="abc";
DWORD dwBytes=0;
WriteProcessMemory(hProcess, 0x00400000, buffer, 3, &dwBytes);
如果是整型的,就是
int value=3454354;
DWORD dwBytes=0;
WriteProcessMemory(hProcess, 0x00400000, &value, sizeof(value), &dwBytes);
其中的起始地址我是随便写的0x00400000, 实际应用时,填成实际值。
WriteProcessMemory此函数能写入某一进程的内存区域。入口区必须可以访问,否则操作将失败。
此函数能写入某一进程的内存区域(直接写入会出Access Violation错误,故需此函数)。
VC++声明
BOOL WriteProcessMemory(
HANDLE hProcess,
LPVOID lpBaseAddress,
LPVOID lpBuffer,
DWORD nSize,
LPDWORD lpNumberOfBytesWritten
);
参数:
hProcess
由OpenProcess返回的进程句柄。
如参数传数据为 INVALID_HANDLE_VALUE 【即-1】目标进程为自身进程
lpBaseAddress
要写的内存首地址
再写入之前,此函数将先检查目标地址是否可用,并能容纳待写入的数据。
lpBuffer
指向要写的数据的指针。
nSize
要写入的字节数。
返回值
非零值代表成功。
可用GetLastError获取更多的错误详细信息。
要求
操作系统版本: Windows CE 2.0及以上版本。
所在头文件: Winbase.h
链接库: Nk.lib
标签:writeprocessmemory