【发布时间】:2013-01-01 15:04:24
【问题描述】:
我尝试使用 C# 直接从内存中读取一个字节值。我尝试使用Marshal.Copy Marshal.ReadByte 和所有范围内的许多不同地址。
我总是遇到异常:
System.AccessViolationException:试图读取或写入受保护的内存。这通常表明其他内存已损坏。
如何访问受保护的内存?
我使用了一些内存查看工具,这些工具可以毫无问题地访问整个内存。
例子:
IntPtr bufPtr = new IntPtr(0x00000772);
byte data = Marshal.ReadByte(bufPtr);
地址不在已知进程中,所以我不能使用ReadProcessMemory() 或类似的东西。
【问题讨论】:
-
如果该指针不在您的地址空间内,则无法在其位置读取。
-
这是一件好事......
-
.NET 的设计不是为了阻止您这样做吗? .NET 旨在保护开发人员免于做潜在危险的事情,比如你正在尝试的事情。自动 CLR 内存管理是 .NET 的核心原则
-
是时候阅读virtual memory...
-
@DavidStratton:C 和 C++ 也不允许您在虚拟内存系统中打孔...