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), }); }
/// <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); }