【发布时间】:2018-08-12 03:29:56
【问题描述】:
我正在尝试读取所有进程的内存。我一直在用这个
ProcessModule pm = process.MainModule;
temp = new byte[pm.ModuleMemorySize];
byte[] d = new byte[temp.Length];
int read;
int size = temp.Length;
MessageBox.Show("Size: " + size);
if (ReadProcessMemory(process.Handle, pm.BaseAddress, temp, size, out read)) {
//d = temp;
fileData = encoder.GetString(temp);
} else MessageBox.Show("Error: " + Marshal.GetLastWin32Error());
有时这完全可以正常工作,但在其他应用程序中它根本不起作用并返回“错误 299”。
我以 x64 和管理员身份运行我的应用程序。我尝试阅读的过程类型似乎没有什么区别。即使是大的(26MB)也读得很好。然后我尝试阅读我的其他 C# 程序之一,但它不起作用。
编辑:这是否可能仅在尝试读取 C# .exe 进程时发生?为什么会这样?
【问题讨论】:
-
对于类似的问题 (stackoverflow.com/questions/18192739/…),Hans Passant 添加了关于 32 位与 64 位处理的说明。您可以检查它是否适用于您的场景。
-
如果你澄清这样做的目的,我可以更好地回答这个问题。你是图案扫描吗?转储整个内存进行分析?
标签: c# .net memory readprocessmemory