ReadProcessMemory在C#中怎么用?
[DllImport( "Kernel32.dll ")]
public static extern unsafe int ReadProcessMemory(int hProcess, int lpBaseAddress, int lpBuffer, int nSize, int* lpNumberOfBytesRead);
这样对吗?
如果要读0c0890c0这个地址,
Hbf1=ReadProcessMemory(pro2,&0c0890c0,参数三,参数四);
对吗?后两个参数要怎么写。
如果函数成功,那函数的返回值就是那个地址的值吧,,
------解决方案--------------------[DllImport( "kernel32.dll ")]
static extern bool ReadProcessMemory(uint hProcess, IntPtr lpBaseAddress,
IntPtr lpBuffer, uint nSize, ref uint lpNumberOfBytesRead);
//....
byte[] vBuffer = new byte[4];
IntPtr vBytesAddress = Marshal.UnsafeAddrOfPinnedArrayElement(vBuffer, 0); // 得到缓冲区的地址
uint vNumberOfBytesRead = 0;
ReadProcessMemory(pro2, (IntPtr)0c0890c0, vBytesAddress, vBytesAddress.Length, ref vNumberOfBytesRead);
int vInt = Marshal.ReadInt32(vBytesAddress); // 读取数据
------解决方案--------------------//参考这样写
[DllImport( "kernel32.dll ")]
static extern bool ReadProcessMemory(uint hProcess, IntPtr lpBaseAddress,
IntPtr lpBuffer, uint nSize, ref uint lpNumberOfBytesRead);
private void button1_Click(object sender, EventArgs e)
{
byte[] vBuffer = new byte[4];
IntPtr vBytesAddress = Marshal.UnsafeAddrOfPinnedArrayElement(vBuffer, 0); // 得到缓冲区的地址
uint vNumberOfBytesRead = 0;
uint pro2 = 1; // 这里换成你的数值
ReadProcessMemory(pro2, (IntPtr)0xc0890c0, vBytesAddress,
(uint)vBuffer.Length, ref vNumberOfBytesRead);
int vInt = Marshal.ReadInt32(vBytesAddress); // 读取数据
}
------解决方案--------------------首先你要确定0xc0890c0这个地址有值
你可以先用其他内存分析器看看
推荐一个我自己写的
http://download.csdn.net/source/160423
这些东西自己查MSDN吧,搜也可以,比我给你贴的更详细
Marshal 成员
提供了一个方法集,这些方法用于分配非托管内存、复制非托管内存块、将托管类型转换为非托管类型,此外还提供了在与非托管代码交互时使用的其他杂项方法。
下表列出了由 Marshal 类型公开的成员。