c#读取指定程序地址的内存

wenwt7 2016-08-11 10:52:59
有一个程序。窗口名为:窗口1。
窗口1将一个BMP的图片存在了内存中。
指针:37246224
长度:118148
c#需要读取并转换成bmp文件。
在窗口1中,自己的程序能读出内存中的BMP,并能成功显示成图像。
然而我按照以下代码。

却怎么也读不出来数据,而且118148的长度,还给我报错说陷入了无限递归,这是什么意思,求解答。
  
[DllImport("kernel32.dll ")]
static extern bool ReadProcessMemory(int hProcess, int lpBaseAddress, out int lpBuffer, int nSize, out int lpNumberOfBytesRead);
private void button1_Click(object sender, EventArgs e)
{
int calcID;
int dataAddress;
int readByte;
//根据窗口标题获得窗体句柄
IntPtr hwnd = FindWindow(null, "窗口1");
MessageBox.Show(hwnd.ToString());
//由窗体句柄获得进程ID
GetWindowThreadProcessId(hwnd, out calcID);
//由进程ID获得进程句柄
int hProcess = OpenProcess(PROCESS_VM_READ | PROCESS_VM_WRITE, false, calcID);
//读取进程指定的内存地址
MessageBox.Show(hProcess.ToString());
ReadProcessMemory(hProcess, 37246224, out dataAddress, 118148, out readByte);
//显示读取的地址
MessageBox.Show(dataAddress.ToString());
}
...全文
1082 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
3070770 2017-05-13
  • 打赏
  • 举报
回复
应该是lpBaseAddress 这个地址错了。看地址的值37246224,应该是系统 内存空间去了。
Poopaye 2017-01-09
  • 打赏
  • 举报
回复
这个ReadProcessMemory是谁转换的?还是从哪里复制来的?
crystal_lz 2017-01-09
  • 打赏
  • 举报
回复
第三个参数你确定不用 byte[] 类型? 你的 dataAddress 初始值是啥?0?要知道 这里是一个传入的接收数据的缓存地址 如果是的话 那应该是空指针异常 还有进程id是否获取正确
lyz2017cc 2017-01-09
  • 打赏
  • 举报
回复
最近也遇到这个问题 请问你这个问题解决了吗?
烟波钓 2016-08-11
  • 打赏
  • 举报
回复
还是无限递归了? 错误截图贴一下吧
wenwt7 2016-08-11
  • 打赏
  • 举报
回复
加了也读不出来。
烟波钓 2016-08-11
  • 打赏
  • 举报
回复
不太懂 但是是不是应该打上unsafe的标签啊

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧