private bool FillGCDesc() { NativeRuntime runtime = _heap.NativeRuntime; int entries; if (!runtime.MemoryReader.TryReadDword(_eeType - (ulong)IntPtr.Size, out entries)) { return(false); } // Get entries in map if (entries < 0) { entries = -entries; } int read; int slots = 1 + entries * 2; byte[] buffer = new byte[slots * IntPtr.Size]; if (!runtime.ReadMemory(_eeType - (ulong)(slots * IntPtr.Size), buffer, buffer.Length, out read) || read != buffer.Length) { return(false); } // Construct the gc desc _gcDesc = new GCDesc(buffer); return(true); }
public override int ReadMemory(ulong address, byte[] buffer, int offset, int count) { if (offset != 0) { throw new NotImplementedException("Non-zero offsets not supported (yet)"); } int bytesRead; if (!NativeRuntime.ReadMemory(address, buffer, count, out bytesRead)) { return(0); } return(bytesRead); }