Example #1
0
        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;
                }
            }
        }
Example #2
0
        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);
            }
        }
Example #3
0
        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);
            }
        }