ReadProcessMemory
从特定进程的内存里读取数据。被读取的整个位置应该是可读的否则操作会失败。
BOOL WINAPI ReadProcessMemory(
__in HANDLE hProcess ,
__in LPCVOID lpBaseAddress ,
__out LPVOID lpBuffer ,
__in SIZE_T nSize ,
__out SIZE_T* lpNumberOfBytesRead
);
参数:
hProcess:目标进程的句柄。这个句柄必须有 PROCESS_VM_READ 标记。
lpBaseAddress:一个指向目标进程需要读取数据的首地址的指针。在读取数据之前,系统将会确认需读取的所有数据是否可读,如果不可读那么函数执行失败。
lpBuffer:指向要接收读取到的数据的缓冲区。
nSize:读取的数据大小,单位为Bytes。
lpNumberOfBytesRead:指向一个变量,用于放置传送数据的大小。如果为NULL,该参数被忽略。
返回值:
成功:非零。
失败:零。
得到更多错误信息,使用 GetLastError 函数。
如果读到了不可读的内存,该函数会失败。
附注:
该函数从指定的进程读取内存数据到当前进程的内存。任何标记为 PROCESS_VM_READ 的句柄都能使用该函数。Typically but not always, the process with address space that is being written to is being debugged.(在很典型的情况下,可被写内存的进程是处于调试状态的。)
要求:
头文件:在Winbase.h里声明;包括Windows.h。
库:Kernel32.lib
动态链接库:Kernel32.dll