Ejemplo n.º 1
0
        /// <summary>
        /// Reads <see cref="Compile2Symbol"/> from the stream.
        /// </summary>
        /// <param name="reader">Stream binary reader.</param>
        /// <param name="symbolStream">Symbol stream that contains this symbol record.</param>
        /// <param name="symbolStreamIndex">Index in symbol stream <see cref="SymbolStream.References"/> array.</param>
        /// <param name="kind">Symbol record kind.</param>
        public static Compile2Symbol Read(IBinaryReader reader, SymbolStream symbolStream, int symbolStreamIndex, SymbolRecordKind kind)
        {
            var result = new Compile2Symbol
            {
                SymbolStream      = symbolStream,
                SymbolStreamIndex = symbolStreamIndex,
                Kind    = kind,
                Flags   = (CompileSymbolFlags)reader.ReadUint(),
                Machine = (CpuType)reader.ReadUshort(),
                VersionFrontendMajor = reader.ReadUshort(),
                VersionFrontendMinor = reader.ReadUshort(),
                VersionFrontendBuild = reader.ReadUshort(),
                VersionBackendMajor  = reader.ReadUshort(),
                VersionBackendMinor  = reader.ReadUshort(),
                VersionBackendBuild  = reader.ReadUshort(),
                Version = reader.ReadCString(),
            };
            List <string> strings = new List <string>();

            for (string s = reader.ReadCString().String; !string.IsNullOrEmpty(s); s = reader.ReadCString().String)
            {
                strings.Add(s);
            }
            result.ExtraStrings = strings;
            return(result);
        }
Ejemplo n.º 2
0
    public void Execute()
    {
        ResolveEventHandler assemblyResolve = CurrentDomain_AssemblyResolve;

        try
        {
            SplitUpReferences();
            GetSymbolProviders();
            assemblyResolver = new AssemblyResolver(ReferenceDictionary, Logger, SplitReferences);
            ReadModule();
            AppDomain.CurrentDomain.AssemblyResolve += assemblyResolve;
            InitialiseWeavers();
            ExecuteWeavers();
            AddWeavingInfo();
            FindStrongNameKey();
            WriteModule();
            ModuleDefinition?.Dispose();
            SymbolStream?.Dispose();
            ExecuteAfterWeavers();
            DisposeWeavers();
        }
        catch (Exception exception)
        {
            AppDomain.CurrentDomain.AssemblyResolve -= assemblyResolve;
            Logger.LogException(exception);
        }
        finally
        {
            ModuleDefinition?.Dispose();
            SymbolStream?.Dispose();
            assemblyResolver?.Dispose();
        }
    }
Ejemplo n.º 3
0
        int lettersInterval; // интервальный коэффициент между буквами

        /// <summary>
        /// Конструктор
        /// </summary>
        /// <param name="lang">Язык</param>
        /// <param name="difficulty">Сложность</param>
        /// <param name="result_handler">Указатель на переменную результата</param>
        public SymbolStreamControl(Language lang, Difficulty difficulty, SymbolStreamControlResultProc result_handler)
        {
            InitializeComponent();
            this.lang = lang;
            // Текст приветствия
            lTaskText.Text = welcome_text;
            // Текущий режим работы элемента управления - "запущен"
            CurControlMode = ControlMode.ControlStarted;
            // Создаём статистику
            curStatistic            = new SymbolStreamStatistic();
            symbolStream            = new SymbolStream(lang, difficulty);
            OnControlResultChanged += result_handler;
            // Подписываемся на события SymbolQueueControl
            symbolQueueControl.LetterMissedEvt += OnLetterMissed;
            symbolQueueControl.QueueEndEvt     += OnQueueEnd;

            // Заполняем Queue нужными символами с нужным интервалом
            int symbolCount = (int)symbolStream.SymbolsCount;

            lettersInterval = symbolStream.LettersInterval;
            symbols         = new char[symbolCount];
            for (int i = 0; i < symbolCount; i++)
            {
                symbols[i] = symbolStream.getRandomSymbol();
            }
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Reads <see cref="FunctionListSymbol"/> from the stream.
        /// </summary>
        /// <param name="reader">Stream binary reader.</param>
        /// <param name="symbolStream">Symbol stream that contains this symbol record.</param>
        /// <param name="symbolStreamIndex">Index in symbol stream <see cref="SymbolStream.References"/> array.</param>
        /// <param name="kind">Symbol record kind.</param>
        /// <param name="dataLength">Record data length.</param>
        public static FunctionListSymbol Read(IBinaryReader reader, SymbolStream symbolStream, int symbolStreamIndex, SymbolRecordKind kind, uint dataLength)
        {
            long start  = reader.Position;
            var  symbol = new FunctionListSymbol
            {
                SymbolStream      = symbolStream,
                SymbolStreamIndex = symbolStreamIndex,
                Kind  = kind,
                Count = reader.ReadUint(),
            };

            symbol.Functions   = new TypeIndex[symbol.Count];
            symbol.Invocations = new uint[symbol.Count];
            for (int i = 0; i < symbol.Functions.Length; i++)
            {
                symbol.Functions[i] = TypeIndex.Read(reader);
            }

            int remaining = (int)(dataLength - (reader.Position - start)) / 4; // 4 = sizeof(uint)

            if (remaining > symbol.Invocations.Length)
            {
                remaining = symbol.Invocations.Length;
            }
            for (int i = 0; i < remaining; i++)
            {
                symbol.Invocations[i] = reader.ReadUint();
            }

            return(symbol);
        }
Ejemplo n.º 5
0
 /// <summary>
 /// Reads <see cref="EndSymbol"/> from the stream.
 /// </summary>
 /// <param name="reader">Stream binary reader.</param>
 /// <param name="symbolStream">Symbol stream that contains this symbol record.</param>
 /// <param name="symbolStreamIndex">Index in symbol stream <see cref="SymbolStream.References"/> array.</param>
 /// <param name="kind">Symbol record kind.</param>
 public static EndSymbol Read(IBinaryReader reader, SymbolStream symbolStream, int symbolStreamIndex, SymbolRecordKind kind)
 {
     return(new EndSymbol
     {
         SymbolStream = symbolStream,
         SymbolStreamIndex = symbolStreamIndex,
         Kind = kind,
     });
 }
Ejemplo n.º 6
0
 /// <summary>
 /// Reads <see cref="NamespaceSymbol"/> from the stream.
 /// </summary>
 /// <param name="reader">Stream binary reader.</param>
 /// <param name="symbolStream">Symbol stream that contains this symbol record.</param>
 /// <param name="symbolStreamIndex">Index in symbol stream <see cref="SymbolStream.References"/> array.</param>
 /// <param name="kind">Symbol record kind.</param>
 public static NamespaceSymbol Read(IBinaryReader reader, SymbolStream symbolStream, int symbolStreamIndex, SymbolRecordKind kind)
 {
     return(new NamespaceSymbol
     {
         SymbolStream = symbolStream,
         SymbolStreamIndex = symbolStreamIndex,
         Kind = kind,
         Namespace = reader.ReadCString(),
     });
 }
Ejemplo n.º 7
0
        /// <summary>
        /// Gets the parent symbol record if exists.
        /// </summary>
        /// <returns></returns>
        private SymbolRecord GetParent()
        {
            long parentPosition = GetParentPosition();

            if (parentPosition <= 0)
            {
                return(null);
            }
            return(SymbolStream.GetSymbolRecordByOffset(parentPosition));
        }
Ejemplo n.º 8
0
 /// <summary>
 /// Reads <see cref="BuildInfoSymbol"/> from the stream.
 /// </summary>
 /// <param name="reader">Stream binary reader.</param>
 /// <param name="symbolStream">Symbol stream that contains this symbol record.</param>
 /// <param name="symbolStreamIndex">Index in symbol stream <see cref="SymbolStream.References"/> array.</param>
 /// <param name="kind">Symbol record kind.</param>
 public static BuildInfoSymbol Read(IBinaryReader reader, SymbolStream symbolStream, int symbolStreamIndex, SymbolRecordKind kind)
 {
     return(new BuildInfoSymbol
     {
         SymbolStream = symbolStream,
         SymbolStreamIndex = symbolStreamIndex,
         Kind = kind,
         BuildId = TypeIndex.Read(reader),
     });
 }
Ejemplo n.º 9
0
        private static ManagedProcedureSymbol[] GetManagedProcedures(SymbolStream symbolStream)
        {
            List <ManagedProcedureSymbol> managedProcedures = new List <ManagedProcedureSymbol>();

            foreach (var kind in ManagedProcedureSymbol.Kinds)
            {
                managedProcedures.AddRange(symbolStream[kind].OfType <ManagedProcedureSymbol>());
            }
            return(managedProcedures.ToArray());
        }
Ejemplo n.º 10
0
        private void Test(SymbolStream symbolStream)
        {
            // Check that getting symbols by kind works correctly
            SymbolRecordKind[] kinds = symbolStream.references.Select(r => r.Kind).Distinct().ToArray();

            foreach (SymbolRecordKind kind in kinds)
            {
                Assert.Equal(symbolStream.references.Count(r => r.Kind == kind), symbolStream[kind].Length);
            }
        }
Ejemplo n.º 11
0
 /// <summary>
 /// Reads <see cref="ObjectNameSymbol"/> from the stream.
 /// </summary>
 /// <param name="reader">Stream binary reader.</param>
 /// <param name="symbolStream">Symbol stream that contains this symbol record.</param>
 /// <param name="symbolStreamIndex">Index in symbol stream <see cref="SymbolStream.References"/> array.</param>
 /// <param name="kind">Symbol record kind.</param>
 public static ObjectNameSymbol Read(IBinaryReader reader, SymbolStream symbolStream, int symbolStreamIndex, SymbolRecordKind kind)
 {
     return(new ObjectNameSymbol
     {
         SymbolStream = symbolStream,
         SymbolStreamIndex = symbolStreamIndex,
         Kind = kind,
         Signature = reader.ReadUint(),
         Name = reader.ReadCString(),
     });
 }
Ejemplo n.º 12
0
 /// <summary>
 /// Reads <see cref="UdtSymbol"/> from the stream.
 /// </summary>
 /// <param name="reader">Stream binary reader.</param>
 /// <param name="symbolStream">Symbol stream that contains this symbol record.</param>
 /// <param name="symbolStreamIndex">Index in symbol stream <see cref="SymbolStream.References"/> array.</param>
 /// <param name="kind">Symbol record kind.</param>
 public static UdtSymbol Read(IBinaryReader reader, SymbolStream symbolStream, int symbolStreamIndex, SymbolRecordKind kind)
 {
     return(new UdtSymbol
     {
         SymbolStream = symbolStream,
         SymbolStreamIndex = symbolStreamIndex,
         Kind = kind,
         Type = TypeIndex.Read(reader),
         Name = reader.ReadCString(),
     });
 }
Ejemplo n.º 13
0
 /// <summary>
 /// Reads <see cref="ExportSymbol"/> from the stream.
 /// </summary>
 /// <param name="reader">Stream binary reader.</param>
 /// <param name="symbolStream">Symbol stream that contains this symbol record.</param>
 /// <param name="symbolStreamIndex">Index in symbol stream <see cref="SymbolStream.References"/> array.</param>
 /// <param name="kind">Symbol record kind.</param>
 public static ExportSymbol Read(IBinaryReader reader, SymbolStream symbolStream, int symbolStreamIndex, SymbolRecordKind kind)
 {
     return(new ExportSymbol
     {
         SymbolStream = symbolStream,
         SymbolStreamIndex = symbolStreamIndex,
         Kind = kind,
         Ordinal = reader.ReadUshort(),
         Flags = (ExportFlags)reader.ReadUshort(),
         Name = reader.ReadCString(),
     });
 }
Ejemplo n.º 14
0
 /// <summary>
 /// Reads <see cref="LocalSymbol"/> from the stream.
 /// </summary>
 /// <param name="reader">Stream binary reader.</param>
 /// <param name="symbolStream">Symbol stream that contains this symbol record.</param>
 /// <param name="symbolStreamIndex">Index in symbol stream <see cref="SymbolStream.References"/> array.</param>
 /// <param name="kind">Symbol record kind.</param>
 public static LocalSymbol Read(IBinaryReader reader, SymbolStream symbolStream, int symbolStreamIndex, SymbolRecordKind kind)
 {
     return(new LocalSymbol
     {
         SymbolStream = symbolStream,
         SymbolStreamIndex = symbolStreamIndex,
         Kind = kind,
         Type = TypeIndex.Read(reader),
         Flags = (LocalVariableFlags)reader.ReadUshort(),
         Name = reader.ReadCString(),
     });
 }
Ejemplo n.º 15
0
 /// <summary>
 /// Reads <see cref="ConstantSymbol"/> from the stream.
 /// </summary>
 /// <param name="reader">Stream binary reader.</param>
 /// <param name="symbolStream">Symbol stream that contains this symbol record.</param>
 /// <param name="symbolStreamIndex">Index in symbol stream <see cref="SymbolStream.References"/> array.</param>
 /// <param name="kind">Symbol record kind.</param>
 public static ConstantSymbol Read(IBinaryReader reader, SymbolStream symbolStream, int symbolStreamIndex, SymbolRecordKind kind)
 {
     return(new ConstantSymbol
     {
         SymbolStream = symbolStream,
         SymbolStreamIndex = symbolStreamIndex,
         Kind = kind,
         TypeIndex = TypeIndex.Read(reader),
         Value = reader.ReadEncodedConstant(),
         Name = reader.ReadCString(),
     });
 }
 /// <summary>
 /// Reads <see cref="AnnotationReferenceSymbol"/> from the stream.
 /// </summary>
 /// <param name="reader">Stream binary reader.</param>
 /// <param name="symbolStream">Symbol stream that contains this symbol record.</param>
 /// <param name="symbolStreamIndex">Index in symbol stream <see cref="SymbolStream.References"/> array.</param>
 /// <param name="kind">Symbol record kind.</param>
 public static AnnotationReferenceSymbol Read(IBinaryReader reader, SymbolStream symbolStream, int symbolStreamIndex, SymbolRecordKind kind)
 {
     return(new AnnotationReferenceSymbol
     {
         SymbolStream = symbolStream,
         SymbolStreamIndex = symbolStreamIndex,
         Kind = kind,
         SumName = reader.ReadUint(),
         SymbolIndex = reader.ReadUint(),
         Module = reader.ReadUshort(),
     });
 }
Ejemplo n.º 17
0
 /// <summary>
 /// Reads <see cref="CallSiteInfoSymbol"/> from the stream.
 /// </summary>
 /// <param name="reader">Stream binary reader.</param>
 /// <param name="symbolStream">Symbol stream that contains this symbol record.</param>
 /// <param name="symbolStreamIndex">Index in symbol stream <see cref="SymbolStream.References"/> array.</param>
 /// <param name="kind">Symbol record kind.</param>
 public static CallSiteInfoSymbol Read(IBinaryReader reader, SymbolStream symbolStream, int symbolStreamIndex, SymbolRecordKind kind)
 {
     return(new CallSiteInfoSymbol
     {
         SymbolStream = symbolStream,
         SymbolStreamIndex = symbolStreamIndex,
         Kind = kind,
         Offset = reader.ReadUint(),
         Segment = reader.ReadUshort(),
         Padding = reader.ReadUshort(),
         Type = TypeIndex.Read(reader),
     });
 }
Ejemplo n.º 18
0
 /// <summary>
 /// Reads <see cref="LabelSymbol"/> from the stream.
 /// </summary>
 /// <param name="reader">Stream binary reader.</param>
 /// <param name="symbolStream">Symbol stream that contains this symbol record.</param>
 /// <param name="symbolStreamIndex">Index in symbol stream <see cref="SymbolStream.References"/> array.</param>
 /// <param name="kind">Symbol record kind.</param>
 public static LabelSymbol Read(IBinaryReader reader, SymbolStream symbolStream, int symbolStreamIndex, SymbolRecordKind kind)
 {
     return(new LabelSymbol
     {
         SymbolStream = symbolStream,
         SymbolStreamIndex = symbolStreamIndex,
         Kind = kind,
         Offset = reader.ReadUint(),
         Segment = reader.ReadUshort(),
         Flags = (ProcedureFlags)reader.ReadByte(),
         Name = reader.ReadCString(),
     });
 }
 /// <summary>
 /// Reads <see cref="RegisterRelativeSymbol"/> from the stream.
 /// </summary>
 /// <param name="reader">Stream binary reader.</param>
 /// <param name="symbolStream">Symbol stream that contains this symbol record.</param>
 /// <param name="symbolStreamIndex">Index in symbol stream <see cref="SymbolStream.References"/> array.</param>
 /// <param name="kind">Symbol record kind.</param>
 public static RegisterRelativeSymbol Read(IBinaryReader reader, SymbolStream symbolStream, int symbolStreamIndex, SymbolRecordKind kind)
 {
     return(new RegisterRelativeSymbol
     {
         SymbolStream = symbolStream,
         SymbolStreamIndex = symbolStreamIndex,
         Kind = kind,
         Offset = reader.ReadUint(),
         Type = TypeIndex.Read(reader),
         Register = (RegisterId)reader.ReadUshort(),
         Name = reader.ReadCString(),
     });
 }
Ejemplo n.º 20
0
 /// <summary>
 /// Reads <see cref="DataSymbol"/> from the stream.
 /// </summary>
 /// <param name="reader">Stream binary reader.</param>
 /// <param name="symbolStream">Symbol stream that contains this symbol record.</param>
 /// <param name="symbolStreamIndex">Index in symbol stream <see cref="SymbolStream.References"/> array.</param>
 /// <param name="kind">Symbol record kind.</param>
 public static DataSymbol Read(IBinaryReader reader, SymbolStream symbolStream, int symbolStreamIndex, SymbolRecordKind kind)
 {
     return(new DataSymbol
     {
         SymbolStream = symbolStream,
         SymbolStreamIndex = symbolStreamIndex,
         Kind = kind,
         Type = TypeIndex.Read(reader),
         Offset = reader.ReadUint(),
         Segment = reader.ReadUshort(),
         Name = reader.ReadCString(),
     });
 }
 /// <summary>
 /// Reads <see cref="ProcedureReferenceSymbol"/> from the stream.
 /// </summary>
 /// <param name="reader">Stream binary reader.</param>
 /// <param name="symbolStream">Symbol stream that contains this symbol record.</param>
 /// <param name="symbolStreamIndex">Index in symbol stream <see cref="SymbolStream.References"/> array.</param>
 /// <param name="kind">Symbol record kind.</param>
 public static ProcedureReferenceSymbol Read(IBinaryReader reader, SymbolStream symbolStream, int symbolStreamIndex, SymbolRecordKind kind)
 {
     return(new ProcedureReferenceSymbol
     {
         SymbolStream = symbolStream,
         SymbolStreamIndex = symbolStreamIndex,
         Kind = kind,
         Checksum = reader.ReadUint(),
         Offset = reader.ReadUint(),
         Module = reader.ReadUshort(),
         Name = reader.ReadCString(),
     });
 }
Ejemplo n.º 22
0
 /// <summary>
 /// Reads <see cref="HeapAllocationSiteSymbol"/> from the stream.
 /// </summary>
 /// <param name="reader">Stream binary reader.</param>
 /// <param name="symbolStream">Symbol stream that contains this symbol record.</param>
 /// <param name="symbolStreamIndex">Index in symbol stream <see cref="SymbolStream.References"/> array.</param>
 /// <param name="kind">Symbol record kind.</param>
 public static HeapAllocationSiteSymbol Read(IBinaryReader reader, SymbolStream symbolStream, int symbolStreamIndex, SymbolRecordKind kind)
 {
     return(new HeapAllocationSiteSymbol
     {
         SymbolStream = symbolStream,
         SymbolStreamIndex = symbolStreamIndex,
         Kind = kind,
         Offset = reader.ReadUint(),
         Segment = reader.ReadUshort(),
         CallInstructionSize = reader.ReadUshort(),
         Type = TypeIndex.Read(reader),
     });
 }
Ejemplo n.º 23
0
 /// <summary>
 /// Reads <see cref="Public32Symbol"/> from the stream.
 /// </summary>
 /// <param name="reader">Stream binary reader.</param>
 /// <param name="symbolStream">Symbol stream that contains this symbol record.</param>
 /// <param name="symbolStreamIndex">Index in symbol stream <see cref="SymbolStream.References"/> array.</param>
 /// <param name="kind">Symbol record kind.</param>
 public static Public32Symbol Read(IBinaryReader reader, SymbolStream symbolStream, int symbolStreamIndex, SymbolRecordKind kind)
 {
     return(new Public32Symbol
     {
         SymbolStream = symbolStream,
         SymbolStreamIndex = symbolStreamIndex,
         Kind = kind,
         Flags = (PublicSymbolFlags)reader.ReadUint(),
         Offset = reader.ReadUint(),
         Segment = reader.ReadUshort(),
         Name = reader.ReadCString(),
     });
 }
Ejemplo n.º 24
0
 /// <summary>
 /// Reads <see cref="FrameCookieSymbol"/> from the stream.
 /// </summary>
 /// <param name="reader">Stream binary reader.</param>
 /// <param name="symbolStream">Symbol stream that contains this symbol record.</param>
 /// <param name="symbolStreamIndex">Index in symbol stream <see cref="SymbolStream.References"/> array.</param>
 /// <param name="kind">Symbol record kind.</param>
 public static FrameCookieSymbol Read(IBinaryReader reader, SymbolStream symbolStream, int symbolStreamIndex, SymbolRecordKind kind)
 {
     return(new FrameCookieSymbol
     {
         SymbolStream = symbolStream,
         SymbolStreamIndex = symbolStreamIndex,
         Kind = kind,
         CodeOffset = reader.ReadUint(),
         Register = (RegisterId)reader.ReadUshort(),
         CookieKind = (FrameCookieKind)reader.ReadByte(),
         Flags = reader.ReadByte(),
     });
 }
Ejemplo n.º 25
0
 /// <summary>
 /// Reads <see cref="CoffGroupSymbol"/> from the stream.
 /// </summary>
 /// <param name="reader">Stream binary reader.</param>
 /// <param name="symbolStream">Symbol stream that contains this symbol record.</param>
 /// <param name="symbolStreamIndex">Index in symbol stream <see cref="SymbolStream.References"/> array.</param>
 /// <param name="kind">Symbol record kind.</param>
 public static CoffGroupSymbol Read(IBinaryReader reader, SymbolStream symbolStream, int symbolStreamIndex, SymbolRecordKind kind)
 {
     return(new CoffGroupSymbol
     {
         SymbolStream = symbolStream,
         SymbolStreamIndex = symbolStreamIndex,
         Kind = kind,
         Size = reader.ReadUint(),
         Characteristics = (ImageSectionCharacteristics)reader.ReadUint(),
         Offset = reader.ReadUint(),
         Segment = reader.ReadUshort(),
         Name = reader.ReadCString(),
     });
 }
Ejemplo n.º 26
0
 /// <summary>
 /// Reads <see cref="BlockSymbol"/> from the stream.
 /// </summary>
 /// <param name="reader">Stream binary reader.</param>
 /// <param name="symbolStream">Symbol stream that contains this symbol record.</param>
 /// <param name="symbolStreamIndex">Index in symbol stream <see cref="SymbolStream.References"/> array.</param>
 /// <param name="kind">Symbol record kind.</param>
 public static BlockSymbol Read(IBinaryReader reader, SymbolStream symbolStream, int symbolStreamIndex, SymbolRecordKind kind)
 {
     return(new BlockSymbol
     {
         SymbolStream = symbolStream,
         SymbolStreamIndex = symbolStreamIndex,
         Kind = kind,
         ParentOffset = reader.ReadUint(),
         End = reader.ReadUint(),
         CodeSize = reader.ReadUint(),
         CodeOffset = reader.ReadUint(),
         Segment = reader.ReadUshort(),
         Name = reader.ReadCString(),
     });
 }
Ejemplo n.º 27
0
 /// <summary>
 /// Reads <see cref="AttributeSlotSymbol"/> from the stream.
 /// </summary>
 /// <param name="reader">Stream binary reader.</param>
 /// <param name="symbolStream">Symbol stream that contains this symbol record.</param>
 /// <param name="symbolStreamIndex">Index in symbol stream <see cref="SymbolStream.References"/> array.</param>
 /// <param name="kind">Symbol record kind.</param>
 public static AttributeSlotSymbol Read(IBinaryReader reader, SymbolStream symbolStream, int symbolStreamIndex, SymbolRecordKind kind)
 {
     return(new AttributeSlotSymbol
     {
         SymbolStream = symbolStream,
         SymbolStreamIndex = symbolStreamIndex,
         Kind = kind,
         Index = reader.ReadUint(),
         TypeIndex = TypeIndex.Read(reader),
         CodeOffset = reader.ReadUint(),
         Segment = reader.ReadUshort(),
         Flags = (LocalVariableFlags)reader.ReadUshort(),
         Name = reader.ReadCString(),
     });
 }
Ejemplo n.º 28
0
 /// <summary>
 /// Reads <see cref="TrampolineSymbol"/> from the stream.
 /// </summary>
 /// <param name="reader">Stream binary reader.</param>
 /// <param name="symbolStream">Symbol stream that contains this symbol record.</param>
 /// <param name="symbolStreamIndex">Index in symbol stream <see cref="SymbolStream.References"/> array.</param>
 /// <param name="kind">Symbol record kind.</param>
 public static TrampolineSymbol Read(IBinaryReader reader, SymbolStream symbolStream, int symbolStreamIndex, SymbolRecordKind kind)
 {
     return(new TrampolineSymbol
     {
         SymbolStream = symbolStream,
         SymbolStreamIndex = symbolStreamIndex,
         Kind = kind,
         Type = (TrampolineType)reader.ReadUshort(),
         Size = reader.ReadUshort(),
         ThunkOffset = reader.ReadUint(),
         TargetOffset = reader.ReadUint(),
         ThunkSection = reader.ReadUshort(),
         TargetSection = reader.ReadUshort(),
     });
 }
Ejemplo n.º 29
0
        /// <summary>
        /// Reads <see cref="InlineSiteSymbol"/> from the stream.
        /// </summary>
        /// <param name="reader">Stream binary reader.</param>
        /// <param name="symbolStream">Symbol stream that contains this symbol record.</param>
        /// <param name="symbolStreamIndex">Index in symbol stream <see cref="SymbolStream.References"/> array.</param>
        /// <param name="kind">Symbol record kind.</param>
        /// <param name="dataLength">Record data length.</param>
        public static InlineSiteSymbol Read(IBinaryReader reader, SymbolStream symbolStream, int symbolStreamIndex, SymbolRecordKind kind, uint dataLength)
        {
            long start = reader.Position;

            return(new InlineSiteSymbol
            {
                SymbolStream = symbolStream,
                SymbolStreamIndex = symbolStreamIndex,
                Kind = kind,
                ParentOffset = reader.ReadUint(),
                End = reader.ReadUint(),
                Inlinee = TypeIndex.Read(reader),
                AnnotationData = reader.ReadByteArray((int)(dataLength - (reader.Position - start))),
            });
        }
Ejemplo n.º 30
0
 /// <summary>
 /// Reads <see cref="SectionSymbol"/> from the stream.
 /// </summary>
 /// <param name="reader">Stream binary reader.</param>
 /// <param name="symbolStream">Symbol stream that contains this symbol record.</param>
 /// <param name="symbolStreamIndex">Index in symbol stream <see cref="SymbolStream.References"/> array.</param>
 /// <param name="kind">Symbol record kind.</param>
 public static SectionSymbol Read(IBinaryReader reader, SymbolStream symbolStream, int symbolStreamIndex, SymbolRecordKind kind)
 {
     return(new SectionSymbol
     {
         SymbolStream = symbolStream,
         SymbolStreamIndex = symbolStreamIndex,
         Kind = kind,
         SectionNumber = reader.ReadUshort(),
         Alignment = reader.ReadByte(),
         Padding = reader.ReadByte(),
         RelativeVirtualAddress = reader.ReadUint(),
         Length = reader.ReadUint(),
         Characteristics = (ImageSectionCharacteristics)reader.ReadUint(),
         Name = reader.ReadCString(),
     });
 }