Пример #1
0
        public bool MoveNext()
        {
            // Done?
            if (_reader.Position >= _reader.Buffer.Length)
            {
                return(false);
            }

            // Read type of next trace entry
            var entryType = (TraceEntryTypes.TraceEntryTypes)_reader.ReadByte();

            // Deserialize trace entry
            Current = entryType switch
            {
                TraceEntryTypes.TraceEntryTypes.Allocation => new Allocation(),
                TraceEntryTypes.TraceEntryTypes.Branch => new Branch(),
                TraceEntryTypes.TraceEntryTypes.Free => new Free(),
                TraceEntryTypes.TraceEntryTypes.HeapMemoryAccess => new HeapMemoryAccess(),
                TraceEntryTypes.TraceEntryTypes.ImageMemoryAccess => new ImageMemoryAccess(),
                TraceEntryTypes.TraceEntryTypes.StackMemoryAccess => new StackMemoryAccess(),
                _ => throw new TraceFormatException("Illegal trace entry type.")
            };
            Current.FromReader(_reader);
            return(true);
        }
Пример #2
0
        /// <summary>
        /// Deserializes an entire trace entry from the given binary reader.
        /// </summary>
        /// <typeparam name="T">Trace entry type.</typeparam>
        /// <param name="reader">Binary reader containing the trace data.</param>
        /// <returns></returns>
        public static TraceEntry DeserializeNextEntry(FastBinaryReader reader)
        {
            // Read depending on type
            TraceEntryTypes entryType = (TraceEntryTypes)reader.ReadByte();

            switch (entryType)
            {
            case TraceEntryTypes.ImageMemoryAccess:
                return(Deserialize <Microwalk.TraceEntryTypes.ImageMemoryAccess>(reader));

            case TraceEntryTypes.HeapMemoryAccess:
                return(Deserialize <Microwalk.TraceEntryTypes.HeapMemoryAccess>(reader));

            case TraceEntryTypes.StackMemoryAccess:
                return(Deserialize <Microwalk.TraceEntryTypes.StackMemoryAccess>(reader));

            case TraceEntryTypes.Allocation:
                return(Deserialize <Microwalk.TraceEntryTypes.Allocation>(reader));

            case TraceEntryTypes.Free:
                return(Deserialize <Microwalk.TraceEntryTypes.Free>(reader));

            case TraceEntryTypes.Branch:
                return(Deserialize <Microwalk.TraceEntryTypes.Branch>(reader));

            default:
                throw new TraceFormatException($"Unknown trace entry type.");
            }
        }