Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }