示例#1
0
        private void InitFromMemory64List()
        {
            _memory64List = new MinidumpMemory64List(_dumpStream);

            RVA64 currentRVA = _memory64List.BaseRva;
            ulong count      = _memory64List.Count;

            // Initialize all chunks.
            MINIDUMP_MEMORY_DESCRIPTOR64 tempMD;
            List <MinidumpMemoryChunk>   chunks = new List <MinidumpMemoryChunk>();

            for (ulong i = 0; i < count; i++)
            {
                tempMD = _memory64List.GetElement((uint)i);
                MinidumpMemoryChunk chunk = new MinidumpMemoryChunk
                {
                    Size = tempMD.DataSize,
                    TargetStartAddress = tempMD.StartOfMemoryRange,
                    TargetEndAddress   = tempMD.StartOfMemoryRange + tempMD.DataSize,
                    RVA = currentRVA.Value
                };

                currentRVA.Value += tempMD.DataSize;
                chunks.Add(chunk);
            }

            chunks.Sort();
            SplitAndMergeChunks(chunks);
            _chunks = chunks.ToArray();
            Count   = (ulong)chunks.Count;

            ValidateChunks();
        }
示例#2
0
 /// <summary>
 /// Translates from an RVA to Dump Pointer.
 /// </summary>
 /// <param name="rva">RVA within the dump</param>
 /// <returns>DumpPointer representing RVA.</returns>
 protected internal DumpPointer TranslateRVA(RVA64 rva)
 {
     return(_base.Adjust(rva.Value));
 }