函数功能:
用于读取其他进程的数据
用于读取其他进程的数据
函数原型:
BOOL ReadProcessMemory(
HANDLE hProcess,
LPCVOID lpBaseAddress,
LPVOID lpBuffer,
DWORD nSize,
LPDWORD lpNumberOfBytesRead
);
参数:
hProcess:
进程句柄
lpBaseAddress:
读出数据的地址
lpBuffer:
存放读取数据的地址
nSize:
读出的数据大小
lpNumberOfBytesRead:
数据的实际大小
C#中使用
using System.Runtime.InteropServices;
[DllImport("kernel32.dll ")]
public static extern bool ReadProcessMemory(
int hProcess,
int lpBaseAddress,
out int lpBuffer,
int nSize,
out int lpNumberOfBytesRead
);
如果我们要读取内存中的的一段数据,我们引入部分可修改成如下:
//一维数组
[DllImport("kernel32.dll ")]
public static extern bool ReadProcessMemory(
int hProcess,
int lpBaseAddress,
byte[] lpBuffer,
int nSize,
out int lpNumberOfBytesRead
);
//二维数组
[DllImport("kernel32.dll ")]
public static extern bool ReadProcessMemory(
int hProcess,
int lpBaseAddress,
byte[,] lpBuffer,
int nSize,
out int lpNumberOfBytesRead
);
由于数组是引用传递,我们不需要写out关键字。
第一个参数:进程句柄,由OpenProcess函数获取
第二个参数:要读出数据的地址,使用CE等辅助工具可取得
第三个参数:用于存放读取数据的地址
第四个参数:要读出的数据大小
第五个参数:读出数据的实际大小
第二个参数:要读出数据的地址,使用CE等辅助工具可取得
第三个参数:用于存放读取数据的地址
第四个参数:要读出的数据大小
第五个参数:读出数据的实际大小