Ejemplo n.º 1
0
        private IEnumerable <byte> ReadCustomMetadata(ManagedProcedureSymbol function)
        {
            foreach (OemSymbol oem in function.Children.OfType <OemSymbol>())
            {
                if (oem.Id == MsilMetadataGuid)
                {
                    IBinaryReader reader = oem.UserDataReader;
                    string        name   = reader.ReadCStringWide().String;

                    if (name == "MD2")
                    {
                        byte version = reader.ReadByte();

                        if (version == 4)
                        {
                            int count = reader.ReadByte();

                            reader.Align(4);
                            for (int i = 0; i < count; i++)
                            {
                                long start        = reader.Position;
                                byte entryVersion = reader.ReadByte();
                                byte kind         = reader.ReadByte();

                                reader.Align(4);
                                yield return(kind);

                                uint numberOfBytesInItem = reader.ReadUint();
                                reader.Position = start + numberOfBytesInItem;
                            }
                        }
                    }
                }
            }
        }
        /// <summary>
        /// Reads <see cref="FileChecksumSubsection"/> from the stream.
        /// </summary>
        /// <param name="reader">Stream binary reader.</param>
        /// <param name="kind">Debug subsection kind.</param>
        public static FileChecksumSubsection Read(IBinaryReader reader, DebugSubsectionKind kind)
        {
            uint nameIndex  = reader.ReadUint();
            byte hashLength = reader.ReadByte();
            FileChecksumHashType hashType = (FileChecksumHashType)reader.ReadByte();

            reader.Align(4);
            return(new FileChecksumSubsection
            {
                Kind = kind,
                NameIndex = nameIndex,
                HashType = hashType,
                HashReader = reader.ReadSubstream(hashLength),
            });
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Reads <see cref="OemSymbol"/> 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 OemSymbol Read(IBinaryReader reader, SymbolStream symbolStream, int symbolStreamIndex, SymbolRecordKind kind, uint dataLength)
        {
            long      positionEnd = reader.Position + dataLength;
            OemSymbol symbol      = new OemSymbol
            {
                SymbolStream      = symbolStream,
                SymbolStreamIndex = symbolStreamIndex,
                Kind      = kind,
                Id        = reader.ReadGuid(),
                TypeIndex = TypeIndex.Read(reader),
            };

            reader.Align(4);
            symbol.UserDataReader = reader.ReadSubstream(positionEnd - reader.Position);
            return(symbol);
        }