internal void ReadTableHeaders(BinaryReader reader) { SetupCodedIndexes(); for (int i = 0; i < 45; i++) { if (tablesHeap.HasTable((MetaDataTableType)i)) { long headerOffset = reader.BaseStream.Position + tablesHeap.StreamOffset; MetaDataTable table = CreateTable((MetaDataTableType)i, reader.ReadInt32(), headerOffset); tablesHeap._tables[i] = table; } } uint tableOffset = (uint)(tablesHeap.StreamOffset + Marshal.SizeOf(typeof(Structures.METADATA_TABLE_HEADER)) + (tablesHeap._tablecount) * 4); foreach (MetaDataTable table in tablesHeap._tables) { if (table != null) { table.TableOffset = tableOffset; tableOffset += (uint)table.PhysicalSize; } } }
internal NETTableReader(TablesHeap tablesheap) { using (BinaryReader reader = new BinaryReader(new MemoryStream(tablesheap.Contents))) { tablesheap._header = ASMGlobals.ReadStructureFromReader <Structures.METADATA_TABLE_HEADER>(reader); this.tablesHeap = tablesheap; for (int i = 0; i < 45; i++) { if (tablesHeap.HasTable((MetaDataTableType)i)) { tablesHeap._tablecount++; } } tablesHeap._tablereader = this; if ((tablesHeap.HeapOffsetSizes & 1) == 1) { tablesHeap._netheader.StringsHeap._indexsize = 4; } if ((tablesHeap.HeapOffsetSizes & 2) == 2) { tablesHeap._netheader.GuidHeap._indexsize = 4; } if ((tablesHeap.HeapOffsetSizes & 4) == 4) { tablesHeap._netheader.BlobHeap._indexsize = 4; } ReadTableHeaders(reader); } }
internal NETTableReader(TablesHeap tablesheap) { using (BinaryReader reader = new BinaryReader(new MemoryStream(tablesheap.Contents))) { tablesheap._header = ASMGlobals.ReadStructureFromReader<Structures.METADATA_TABLE_HEADER>(reader); this.tablesHeap = tablesheap; for (int i = 0; i < 45; i++) if (tablesHeap.HasTable((MetaDataTableType)i)) { tablesHeap._tablecount++; } tablesHeap._tablereader = this; if ((tablesHeap.HeapOffsetSizes & 1) == 1) tablesHeap._netheader.StringsHeap._indexsize = 4; if ((tablesHeap.HeapOffsetSizes & 2) == 2) tablesHeap._netheader.GuidHeap._indexsize = 4; if ((tablesHeap.HeapOffsetSizes & 4) == 4) tablesHeap._netheader.BlobHeap._indexsize = 4; ReadTableHeaders(reader); } }