public static VTableHeader FromReadingContext(ReadingContext readingContext) { var tableHeader = new VTableHeader(); tableHeader.Rva = readingContext.Reader.ReadUInt32(); ushort size = readingContext.Reader.ReadUInt16(); tableHeader.Attributes = (VTableAttributes) readingContext.Reader.ReadUInt16(); long fileOffset = readingContext.Assembly.RvaToFileOffset(tableHeader.Rva); var tokensReader = readingContext.Reader.CreateSubReader(fileOffset, size * (tableHeader.Is32Bit ? sizeof (int) : sizeof (long))); for (int i = 0; i < size; i++) { var token = new MetadataToken(tokensReader.ReadUInt32()); MetadataMember member; if (readingContext.Assembly.NetDirectory.MetadataHeader.GetStream<TableStream>() .TryResolveMember(token, out member)) { tableHeader.Table.Add(member); } if (tableHeader.Is64Bit) tokensReader.ReadUInt32(); } return tableHeader; }
public static VTableHeader FromReadingContext(ReadingContext readingContext) { var tableHeader = new VTableHeader(); tableHeader.Rva = readingContext.Reader.ReadUInt32(); ushort size = readingContext.Reader.ReadUInt16(); tableHeader.Attributes = (VTableAttributes)readingContext.Reader.ReadUInt16(); long fileOffset = readingContext.Assembly.RvaToFileOffset(tableHeader.Rva); var tokensReader = readingContext.Reader.CreateSubReader(fileOffset, size * (tableHeader.Is32Bit ? sizeof(int) : sizeof(long))); for (int i = 0; i < size; i++) { var token = new MetadataToken(tokensReader.ReadUInt32()); MetadataMember member; if (readingContext.Assembly.NetDirectory.MetadataHeader.GetStream <TableStream>() .TryResolveMember(token, out member)) { tableHeader.Table.Add(member); } if (tableHeader.Is64Bit) { tokensReader.ReadUInt32(); } } return(tableHeader); }