本文供自己学习,积累经验使用。
向内存读写数据
类名:Marshal
对非托管内存进行操作控制
通用方法:
byte ReadByte(IntPtr address);//读取指定句柄所代表内存处的内容
void WriteByte(IntPtr address,byte b);//向指定句柄所代表内存地址address处写入一个b。
代码:
byte b = Marshal.ReadByte(address1+5772);//读取指定内存的方法。
Marshal.WriteByte(address2, 109);
得到内存句柄
结构体:GCHandle
从非托管内存访问托管对象的方法
通用方法:
GCHandle Alloc(object value,GCHandleType type)//为指定对象分配指定类型的句柄
GCHandleType为枚举类型,取值为:
Weak = 0; //此句柄类型用于跟踪对象,但允许回收该对象
WeakTrackResurrection = 1; //该句柄类型类似于 System.Runtime.InteropServices.GCHandleType.Weak,但如果对象在终结过程中复活,此句柄不归零。
Normal = 2; //此句柄类型表示不透明句柄,这意味着无法通过此句柄解析固定对象的地址。可以使用此类型跟踪对象,并防止它被垃圾回收器回收。当非托管客户端持有对托管对象的唯一引用(从垃圾回收