Пример #1
0
        protected internal override void Read(IBinaryAccessor accessor, TableCompressionInfo compressionInfo, int count)
        {
            if (count == 0)
            {
                return;
            }

            var rows = new TypeDefRow[count];

            for (int i = 0; i < count; i++)
            {
                var row = new TypeDefRow();
                row.Flags      = (int)accessor.ReadUInt32();
                row.Name       = accessor.ReadCell(compressionInfo.StringHeapOffsetSize4);
                row.Namespace  = accessor.ReadCell(compressionInfo.StringHeapOffsetSize4);
                row.Extends    = accessor.ReadCell(compressionInfo.CodedTokenDataSize4[0]);
                row.FieldList  = accessor.ReadCell(compressionInfo.TableRowIndexSize4[MetadataTableType.Field]);
                row.MethodList = accessor.ReadCell(compressionInfo.TableRowIndexSize4[MetadataTableType.MethodDef]);

                rows[i] = row;
            }

            _count = count;
            _rows  = rows;
        }
Пример #2
0
        protected internal override void Read(IBinaryAccessor accessor, TableCompressionInfo compressionInfo, int count)
        {
            if (count == 0)
            {
                return;
            }

            var rows = new AssemblyRow[count];

            for (int i = 0; i < count; i++)
            {
                var row = new AssemblyRow();
                row.HashAlgId      = (HashAlgorithm)accessor.ReadUInt32();
                row.MajorVersion   = (int)accessor.ReadUInt16();
                row.MinorVersion   = (int)accessor.ReadUInt16();
                row.BuildNumber    = (int)accessor.ReadUInt16();
                row.RevisionNumber = (int)accessor.ReadUInt16();
                row.Flags          = (int)accessor.ReadUInt32();
                row.PublicKey      = accessor.ReadCell(compressionInfo.BlobHeapOffsetSize4);
                row.Name           = accessor.ReadCell(compressionInfo.StringHeapOffsetSize4);
                row.Locale         = accessor.ReadCell(compressionInfo.StringHeapOffsetSize4);

                rows[i] = row;
            }

            _count = count;
            _rows  = rows;
        }
Пример #3
0
 protected internal override void Write(Blob blob, ref int pos, TableCompressionInfo compressionInfo)
 {
     for (int i = 0; i < _count; i++)
     {
         blob.WriteCell(ref pos, compressionInfo.TableRowIndexSize4[MetadataTableType.Field], _rows[i]);
     }
 }
Пример #4
0
        protected internal override void Read(IBinaryAccessor accessor, TableCompressionInfo compressionInfo, int count)
        {
            if (count == 0)
            {
                return;
            }

            var rows = new MethodRow[count];

            for (int i = 0; i < count; i++)
            {
                var row = new MethodRow();
                row.RVA       = accessor.ReadUInt32();
                row.ImplFlags = accessor.ReadUInt16();
                row.Flags     = accessor.ReadUInt16();
                row.Name      = accessor.ReadCell(compressionInfo.StringHeapOffsetSize4);
                row.Signature = accessor.ReadCell(compressionInfo.BlobHeapOffsetSize4);
                row.ParamList = accessor.ReadCell(compressionInfo.TableRowIndexSize4[MetadataTableType.Param]);

                rows[i] = row;
            }

            _count = count;
            _rows  = rows;
        }
        internal void Read(IBinaryAccessor accessor)
        {
            // Reserved, 4 bytes
            accessor.ReadInt32();

            _schemaMajorVersion = accessor.ReadByte();
            _schemaMinorVersion = accessor.ReadByte();

            byte heapFlags = accessor.ReadByte();

            // Reserved, 1 bytes
            accessor.ReadByte();

            ulong validMask = accessor.ReadUInt64();

            _sortMask = accessor.ReadUInt64();

            // Row counts
            int[] rowCounts = new int[MetadataConstants.TableCount];
            for (int tableType = 0; tableType < MetadataConstants.TableCount; tableType++)
            {
                if ((validMask & (1UL << tableType)) != 0)
                {
                    rowCounts[tableType] = accessor.ReadInt32();
                }
            }

            var compressionInfo = TableCompressionInfo.Create(_metadata, rowCounts, heapFlags);

            // Tables
            for (int tableType = 0; tableType < MetadataConstants.TableCount; tableType++)
            {
                _tables[tableType].Read(accessor, compressionInfo, rowCounts[tableType]);
            }
        }
Пример #6
0
 private static void LoadTableIndexSizes(TableCompressionInfo info, MetadataScope metadata, int[] rowCounts)
 {
     for (int i = 0; i < MetadataConstants.TableCount; i++)
     {
         info.TableRowIndexSize4[i] = (rowCounts[i] >= (1 << 16));
     }
 }
        protected internal override void Write(Blob blob, ref int pos, TableCompressionInfo compressionInfo)
        {
            for (int i = 0; i < _count; i++)
            {
                var row = _rows[i];

                blob.Write(ref pos, (uint)row.Processor);
            }
        }
Пример #8
0
        protected internal override void Write(Blob blob, ref int pos, TableCompressionInfo compressionInfo)
        {
            for (int i = 0; i < _count; i++)
            {
                var row = _rows[i];

                blob.WriteCell(ref pos, compressionInfo.BlobHeapOffsetSize4, (int)row.Signature);
            }
        }
        protected internal override void Write(Blob blob, ref int pos, TableCompressionInfo compressionInfo)
        {
            for (int i = 0; i < _count; i++)
            {
                var row = _rows[i];

                blob.Write(ref pos, (uint)row.Processor);
                blob.WriteCell(ref pos, compressionInfo.TableRowIndexSize4[MetadataTableType.AssemblyRef], (int)row.AssemblyRef);
            }
        }
        protected internal override void Write(Blob blob, ref int pos, TableCompressionInfo compressionInfo)
        {
            for (int i = 0; i < _count; i++)
            {
                var row = _rows[i];

                blob.WriteCell(ref pos, compressionInfo.TableRowIndexSize4[MetadataTableType.TypeDef], (int)row.NestedClass);
                blob.WriteCell(ref pos, compressionInfo.TableRowIndexSize4[MetadataTableType.TypeDef], (int)row.EnclosingClass);
            }
        }
Пример #11
0
        protected internal override void Write(Blob blob, ref int pos, TableCompressionInfo compressionInfo)
        {
            for (int i = 0; i < _count; i++)
            {
                var row = _rows[i];

                blob.WriteCell(ref pos, compressionInfo.TableRowIndexSize4[MetadataTableType.GenericParam], (int)row.Owner);
                blob.WriteCell(ref pos, compressionInfo.CodedTokenDataSize4[0], (int)row.Constraint);
            }
        }
        protected internal override void Write(Blob blob, ref int pos, TableCompressionInfo compressionInfo)
        {
            for (int i = 0; i < _count; i++)
            {
                var row = _rows[i];

                blob.WriteCell(ref pos, compressionInfo.TableRowIndexSize4[MetadataTableType.TypeDef], (int)row.Parent);
                blob.WriteCell(ref pos, compressionInfo.TableRowIndexSize4[MetadataTableType.Property], (int)row.PropertyList);
            }
        }
Пример #13
0
        protected internal override void Write(Blob blob, ref int pos, TableCompressionInfo compressionInfo)
        {
            for (int i = 0; i < _count; i++)
            {
                var row = _rows[i];

                blob.WriteCell(ref pos, compressionInfo.CodedTokenDataSize4[7], (int)row.Method);
                blob.WriteCell(ref pos, compressionInfo.BlobHeapOffsetSize4, (int)row.Instantiation);
            }
        }
Пример #14
0
        protected internal override void Write(Blob blob, ref int pos, TableCompressionInfo compressionInfo)
        {
            for (int i = 0; i < _count; i++)
            {
                var row = _rows[i];

                blob.WriteCell(ref pos, compressionInfo.TableRowIndexSize4[MetadataTableType.TypeDef], (int)row.Class);
                blob.WriteCell(ref pos, compressionInfo.CodedTokenDataSize4[0], (int)row.Interface);
            }
        }
        protected internal override void Write(Blob blob, ref int pos, TableCompressionInfo compressionInfo)
        {
            for (int i = 0; i < _count; i++)
            {
                var row = _rows[i];

                blob.Write(ref pos, (uint)row.OSPlatformId);
                blob.Write(ref pos, (uint)row.OSMajorVersion);
                blob.Write(ref pos, (uint)row.OSMinorVersion);
            }
        }
Пример #16
0
        protected internal override void Write(Blob blob, ref int pos, TableCompressionInfo compressionInfo)
        {
            for (int i = 0; i < _count; i++)
            {
                var row = _rows[i];

                blob.Write(ref pos, (uint)row.Flags);
                blob.WriteCell(ref pos, compressionInfo.StringHeapOffsetSize4, (int)row.Name);
                blob.WriteCell(ref pos, compressionInfo.BlobHeapOffsetSize4, (int)row.HashValue);
            }
        }
		protected internal override void Write(Blob blob, ref int pos, TableCompressionInfo compressionInfo)
		{
			for (int i = 0; i < _count; i++)
			{
				var row = _rows[i];

				blob.Write(ref pos, (short)row.Action);
				blob.WriteCell(ref pos, compressionInfo.CodedTokenDataSize4[4], (int)row.Parent);
				blob.WriteCell(ref pos, compressionInfo.BlobHeapOffsetSize4, (int)row.PermissionSet);
			}
		}
Пример #18
0
        protected internal override void Write(Blob blob, ref int pos, TableCompressionInfo compressionInfo)
        {
            for (int i = 0; i < _count; i++)
            {
                var row = _rows[i];

                blob.WriteCell(ref pos, compressionInfo.CodedTokenDataSize4[2], (int)row.Parent);
                blob.WriteCell(ref pos, compressionInfo.CodedTokenDataSize4[10], (int)row.Type);
                blob.WriteCell(ref pos, compressionInfo.BlobHeapOffsetSize4, (int)row.Value);
            }
        }
        protected internal override void Write(Blob blob, ref int pos, TableCompressionInfo compressionInfo)
        {
            for (int i = 0; i < _count; i++)
            {
                var row = _rows[i];

                blob.WriteCell(ref pos, compressionInfo.CodedTokenDataSize4[11], (int)row.ResolutionScope);
                blob.WriteCell(ref pos, compressionInfo.StringHeapOffsetSize4, (int)row.Name);
                blob.WriteCell(ref pos, compressionInfo.StringHeapOffsetSize4, (int)row.Namespace);
            }
        }
Пример #20
0
        protected internal override void Write(Blob blob, ref int pos, TableCompressionInfo compressionInfo)
        {
            for (int i = 0; i < _count; i++)
            {
                var row = _rows[i];

                blob.Write(ref pos, (ushort)row.Semantic);
                blob.WriteCell(ref pos, compressionInfo.TableRowIndexSize4[MetadataTableType.MethodDef], (int)row.Method);
                blob.WriteCell(ref pos, compressionInfo.CodedTokenDataSize4[6], (int)row.Association);
            }
        }
        protected internal override void Write(Blob blob, ref int pos, TableCompressionInfo compressionInfo)
        {
            for (int i = 0; i < _count; i++)
            {
                var row = _rows[i];

                blob.Write(ref pos, (ushort)row.Flags);
                blob.WriteCell(ref pos, compressionInfo.StringHeapOffsetSize4, (int)row.Name);
                blob.WriteCell(ref pos, compressionInfo.CodedTokenDataSize4[0], (int)row.EventType);
            }
        }
        protected internal override void Write(Blob blob, ref int pos, TableCompressionInfo compressionInfo)
        {
            for (int i = 0; i < _count; i++)
            {
                var row = _rows[i];

                blob.Write(ref pos, (ushort)row.MappingFlags);
                blob.WriteCell(ref pos, compressionInfo.CodedTokenDataSize4[8], (int)row.MemberForwarded);
                blob.WriteCell(ref pos, compressionInfo.StringHeapOffsetSize4, (int)row.ImportName);
                blob.WriteCell(ref pos, compressionInfo.TableRowIndexSize4[MetadataTableType.ModuleRef], (int)row.ImportScope);
            }
        }
        protected internal override void Write(Blob blob, ref int pos, TableCompressionInfo compressionInfo)
        {
            for (int i = 0; i < _count; i++)
            {
                var row = _rows[i];

                blob.Write(ref pos, (uint)row.Flags);
                blob.Write(ref pos, row.TypeDefId);
                blob.WriteCell(ref pos, compressionInfo.StringHeapOffsetSize4, (int)row.TypeName);
                blob.WriteCell(ref pos, compressionInfo.StringHeapOffsetSize4, (int)row.TypeNamespace);
                blob.WriteCell(ref pos, compressionInfo.CodedTokenDataSize4[9], (int)row.Implementation);
            }
        }
Пример #24
0
        protected internal override void Write(Blob blob, ref int pos, TableCompressionInfo compressionInfo)
        {
            for (int i = 0; i < _count; i++)
            {
                var row = _rows[i];

                blob.Write(ref pos, (ushort)row.Generation);
                blob.WriteCell(ref pos, compressionInfo.StringHeapOffsetSize4, (int)row.Name);
                blob.WriteCell(ref pos, compressionInfo.GuidHeapOffsetSize4, (int)row.Mvid);
                blob.WriteCell(ref pos, compressionInfo.GuidHeapOffsetSize4, (int)row.EncId);
                blob.WriteCell(ref pos, compressionInfo.GuidHeapOffsetSize4, (int)row.EncBaseId);
            }
        }
Пример #25
0
        protected internal override void Write(Blob blob, ref int pos, TableCompressionInfo compressionInfo)
        {
            for (int i = 0; i < _count; i++)
            {
                var row = _rows[i];

                blob.Write(ref pos, (uint)row.RVA);
                blob.Write(ref pos, (ushort)row.ImplFlags);
                blob.Write(ref pos, (ushort)row.Flags);
                blob.WriteCell(ref pos, compressionInfo.StringHeapOffsetSize4, (int)row.Name);
                blob.WriteCell(ref pos, compressionInfo.BlobHeapOffsetSize4, (int)row.Signature);
                blob.WriteCell(ref pos, compressionInfo.TableRowIndexSize4[MetadataTableType.Param], (int)row.ParamList);
            }
        }
Пример #26
0
        private void DoBuild()
        {
            _compressionInfo = TableCompressionInfo.Create(_metadata);

            // Signature
            _state.StreamPos += 16;
            _state.StreamPos += Encoding.UTF8.GetByteCount((_metadata.FrameworkVersionMoniker ?? "")).Align(4);

            // Storage header
            _state.StreamPos += 4;

            // Tables
            {
                _state.TablesLength = GetTableStreamLength();
                string tableName = _metadata.Tables.IsOptimized ? MetadataConstants.StreamTable : MetadataConstants.StreamTableUnoptimized;
                _state.StreamPos += 8 + (tableName.Length + 1).Align(4);
                _state.StreamCount++;
            }

            // Strings
            if (_metadata.Strings.Length > 0)
            {
                _state.StreamPos += 8 + (MetadataConstants.StreamStrings.Length + 1).Align(4);
                _state.StreamCount++;
            }

            if (_metadata.UserStrings.Length > 0)
            {
                _state.StreamPos += 8 + (MetadataConstants.StreamUserStrings.Length + 1).Align(4);
                _state.StreamCount++;
            }

            if (_metadata.Guids.Length > 0)
            {
                _state.StreamPos += 8 + (MetadataConstants.StreamGuid.Length + 1).Align(4);
                _state.StreamCount++;
            }

            if (_metadata.Blobs.Length > 0)
            {
                _state.StreamPos += 8 + (MetadataConstants.StreamBlob.Length + 1).Align(4);
                _state.StreamCount++;
            }

            foreach (var externalStream in _metadata.ExternalStreams)
            {
                _state.StreamPos += 8 + ((externalStream.Name ?? "").Length + 1).Align(4);
                _state.StreamCount++;
            }
        }
Пример #27
0
        protected internal override void Write(Blob blob, ref int pos, TableCompressionInfo compressionInfo)
        {
            for (int i = 0; i < _count; i++)
            {
                var row = _rows[i];

                blob.Write(ref pos, (uint)row.Flags);
                blob.WriteCell(ref pos, compressionInfo.StringHeapOffsetSize4, (int)row.Name);
                blob.WriteCell(ref pos, compressionInfo.StringHeapOffsetSize4, (int)row.Namespace);
                blob.WriteCell(ref pos, compressionInfo.CodedTokenDataSize4[0], (int)row.Extends);
                blob.WriteCell(ref pos, compressionInfo.TableRowIndexSize4[MetadataTableType.Field], (int)row.FieldList);
                blob.WriteCell(ref pos, compressionInfo.TableRowIndexSize4[MetadataTableType.MethodDef], (int)row.MethodList);
            }
        }
Пример #28
0
        protected internal override void Read(IBinaryAccessor accessor, TableCompressionInfo compressionInfo, int count)
        {
            if (count == 0)
            {
                return;
            }

            var rows = new int[count];

            for (int i = 0; i < count; i++)
            {
                rows[i] = accessor.ReadCell(compressionInfo.TableRowIndexSize4[MetadataTableType.Field]);
            }

            _count = count;
            _rows  = rows;
        }
Пример #29
0
        protected internal override void Write(Blob blob, ref int pos, TableCompressionInfo compressionInfo)
        {
            for (int i = 0; i < _count; i++)
            {
                var row = _rows[i];

                blob.Write(ref pos, (uint)row.HashAlgId);
                blob.Write(ref pos, (ushort)row.MajorVersion);
                blob.Write(ref pos, (ushort)row.MinorVersion);
                blob.Write(ref pos, (ushort)row.BuildNumber);
                blob.Write(ref pos, (ushort)row.RevisionNumber);
                blob.Write(ref pos, (uint)row.Flags);
                blob.WriteCell(ref pos, compressionInfo.BlobHeapOffsetSize4, (int)row.PublicKey);
                blob.WriteCell(ref pos, compressionInfo.StringHeapOffsetSize4, (int)row.Name);
                blob.WriteCell(ref pos, compressionInfo.StringHeapOffsetSize4, (int)row.Locale);
            }
        }
		protected internal override void Read(IBinaryAccessor accessor, TableCompressionInfo compressionInfo, int count)
		{
			if (count == 0)
				return;

			var rows = new DeclSecurityRow[count];
			for (int i = 0; i < count; i++)
			{
				var row = new DeclSecurityRow();
				row.Action = (SecurityAction)accessor.ReadInt16();
				row.Parent = accessor.ReadCell(compressionInfo.CodedTokenDataSize4[4]);
				row.PermissionSet = accessor.ReadCell(compressionInfo.BlobHeapOffsetSize4);

				rows[i] = row;
			}

			_count = count;
			_rows = rows;
		}