示例#1
0
 /// <summary>
 /// Writes a raw row
 /// </summary>
 /// <param name="writer">Writer</param>
 /// <param name="metadata">Metadata</param>
 /// <param name="table">Table</param>
 /// <param name="row">Row</param>
 public static void Write(this BinaryWriter writer, MetaData metadata, IMDTable table, IRawRow row)
 {
     if (table.Table == Table.Constant)
     {
         var cols = table.TableInfo.Columns;
         var row2 = (RawConstantRow)row;
         writer.Write(row2.Type);
         writer.Write(row2.Padding);
         cols[1].Write(writer, row2.Parent);
         cols[2].Write(writer, row2.Value);
     }
     else
     {
         var cols        = table.TableInfo.Columns;
         var stringsHeap = metadata.StringsHeap;
         foreach (var col in cols)
         {
             if (col.ColumnSize == ColumnSize.Strings)
             {
                 col.Write(writer, stringsHeap.GetOffset(row.Read(col.Index)));
             }
             else
             {
                 col.Write(writer, row.Read(col.Index));
             }
         }
     }
 }
		/// <summary>
		/// Writes a metadata table
		/// </summary>
		/// <param name="writer">Writer</param>
		/// <param name="table">Table</param>
		public static void Write(this BinaryWriter writer, IMDTable table) {
			switch (table.Table) {
			case Table.Module:			writer.Write((MDTable<RawModuleRow>)table); break;
			case Table.TypeRef:			writer.Write((MDTable<RawTypeRefRow>)table); break;
			case Table.TypeDef:			writer.Write((MDTable<RawTypeDefRow>)table); break;
			case Table.FieldPtr:		writer.Write((MDTable<RawFieldPtrRow>)table); break;
			case Table.Field:			writer.Write((MDTable<RawFieldRow>)table); break;
			case Table.MethodPtr:		writer.Write((MDTable<RawMethodPtrRow>)table); break;
			case Table.Method:			writer.Write((MDTable<RawMethodRow>)table); break;
			case Table.ParamPtr:		writer.Write((MDTable<RawParamPtrRow>)table); break;
			case Table.Param:			writer.Write((MDTable<RawParamRow>)table); break;
			case Table.InterfaceImpl:	writer.Write((MDTable<RawInterfaceImplRow>)table); break;
			case Table.MemberRef:		writer.Write((MDTable<RawMemberRefRow>)table); break;
			case Table.Constant:		writer.Write((MDTable<RawConstantRow>)table); break;
			case Table.CustomAttribute:	writer.Write((MDTable<RawCustomAttributeRow>)table); break;
			case Table.FieldMarshal:	writer.Write((MDTable<RawFieldMarshalRow>)table); break;
			case Table.DeclSecurity:	writer.Write((MDTable<RawDeclSecurityRow>)table); break;
			case Table.ClassLayout:		writer.Write((MDTable<RawClassLayoutRow>)table); break;
			case Table.FieldLayout:		writer.Write((MDTable<RawFieldLayoutRow>)table); break;
			case Table.StandAloneSig:	writer.Write((MDTable<RawStandAloneSigRow>)table); break;
			case Table.EventMap:		writer.Write((MDTable<RawEventMapRow>)table); break;
			case Table.EventPtr:		writer.Write((MDTable<RawEventPtrRow>)table); break;
			case Table.Event:			writer.Write((MDTable<RawEventRow>)table); break;
			case Table.PropertyMap:		writer.Write((MDTable<RawPropertyMapRow>)table); break;
			case Table.PropertyPtr:		writer.Write((MDTable<RawPropertyPtrRow>)table); break;
			case Table.Property:		writer.Write((MDTable<RawPropertyRow>)table); break;
			case Table.MethodSemantics:	writer.Write((MDTable<RawMethodSemanticsRow>)table); break;
			case Table.MethodImpl:		writer.Write((MDTable<RawMethodImplRow>)table); break;
			case Table.ModuleRef:		writer.Write((MDTable<RawModuleRefRow>)table); break;
			case Table.TypeSpec:		writer.Write((MDTable<RawTypeSpecRow>)table); break;
			case Table.ImplMap:			writer.Write((MDTable<RawImplMapRow>)table); break;
			case Table.FieldRVA:		writer.Write((MDTable<RawFieldRVARow>)table); break;
			case Table.ENCLog:			writer.Write((MDTable<RawENCLogRow>)table); break;
			case Table.ENCMap:			writer.Write((MDTable<RawENCMapRow>)table); break;
			case Table.Assembly:		writer.Write((MDTable<RawAssemblyRow>)table); break;
			case Table.AssemblyProcessor: writer.Write((MDTable<RawAssemblyProcessorRow>)table); break;
			case Table.AssemblyOS:		writer.Write((MDTable<RawAssemblyOSRow>)table); break;
			case Table.AssemblyRef:		writer.Write((MDTable<RawAssemblyRefRow>)table); break;
			case Table.AssemblyRefProcessor: writer.Write((MDTable<RawAssemblyRefProcessorRow>)table); break;
			case Table.AssemblyRefOS:	writer.Write((MDTable<RawAssemblyRefOSRow>)table); break;
			case Table.File:			writer.Write((MDTable<RawFileRow>)table); break;
			case Table.ExportedType:	writer.Write((MDTable<RawExportedTypeRow>)table); break;
			case Table.ManifestResource:writer.Write((MDTable<RawManifestResourceRow>)table); break;
			case Table.NestedClass:		writer.Write((MDTable<RawNestedClassRow>)table); break;
			case Table.GenericParam:	writer.Write((MDTable<RawGenericParamRow>)table); break;
			case Table.MethodSpec:		writer.Write((MDTable<RawMethodSpecRow>)table); break;
			case Table.GenericParamConstraint: writer.Write((MDTable<RawGenericParamConstraintRow>)table); break;

			default:
				var cols = table.TableInfo.Columns;
				foreach (var row in table.GetRawRows()) {
					foreach (var col in cols)
						col.Write(writer, row.Read(col.Index));
				}
				break;
			}
		}
		/// <summary>
		/// Writes a raw row
		/// </summary>
		/// <param name="writer">Writer</param>
		/// <param name="table">Table</param>
		/// <param name="row">Row</param>
		public static void Write(this BinaryWriter writer, IMDTable table, IRawRow row) {
			if (table.Table == Table.Constant) {
				var cols = table.TableInfo.Columns;
				var row2 = (RawConstantRow)row;
				writer.Write(row2.Type);
				writer.Write(row2.Padding);
				cols[1].Write(writer, row2.Parent);
				cols[2].Write(writer, row2.Value);
			}
			else {
				var cols = table.TableInfo.Columns;
				foreach (var col in cols)
					col.Write(writer, row.Read(col.Index));
			}
		}
示例#4
0
		/// <summary>
		/// Constructor
		/// </summary>
		/// <param name="version">Hot heap version</param>
		/// <param name="mdTable">The MD table</param>
		internal HotTable(HotHeapVersion version, IMDTable mdTable) {
			this.mdTable = mdTable;
			this.version = version;

			switch (version) {
			case HotHeapVersion.CLR20:
				hotTableHeaderSize = 0x12;
				break;
			case HotHeapVersion.CLR40:
				hotTableHeaderSize = 0x16;
				break;
			default:
				throw new ArgumentException("Invalid hot heap version");
			}

			this.alignedHotTableHeaderSize = Utils.AlignUp(this.hotTableHeaderSize, HT_ALIGNMENT);
		}
示例#5
0
        /// <summary>
        /// Writes a raw row
        /// </summary>
        /// <param name="writer">Writer</param>
        /// <param name="metadata">Metadata</param>
        /// <param name="table">Table</param>
        /// <param name="row">Row</param>
        public static void Write(this BinaryWriter writer, MetaData metadata, IMDTable table, IRawRow row)
        {
            var cols        = table.TableInfo.Columns;
            var stringsHeap = metadata.StringsHeap;

            foreach (var col in cols)
            {
                if (col.ColumnSize == ColumnSize.Strings)
                {
                    col.Write(writer, stringsHeap.GetOffset(row.Read(col.Index)));
                }
                else
                {
                    col.Write(writer, row.Read(col.Index));
                }
            }
        }
示例#6
0
 /// <summary>
 /// Writes a raw row
 /// </summary>
 /// <param name="writer">Writer</param>
 /// <param name="table">Table</param>
 /// <param name="row">Row</param>
 public static void Write(this BinaryWriter writer, IMDTable table, IRawRow row)
 {
     if (table.Table == Table.Constant)
     {
         var cols = table.TableInfo.Columns;
         var row2 = (RawConstantRow)row;
         writer.Write(row2.Type);
         writer.Write(row2.Padding);
         cols[1].Write(writer, row2.Parent);
         cols[2].Write(writer, row2.Value);
     }
     else
     {
         var cols = table.TableInfo.Columns;
         foreach (var col in cols)
         {
             col.Write(writer, row.Read(col.Index));
         }
     }
 }
示例#7
0
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="version">Hot heap version</param>
        /// <param name="mdTable">The MD table</param>
        internal HotTable(HotHeapVersion version, IMDTable mdTable)
        {
            this.mdTable = mdTable;
            this.version = version;

            switch (version)
            {
            case HotHeapVersion.CLR20:
                hotTableHeaderSize = 0x12;
                break;

            case HotHeapVersion.CLR40:
                hotTableHeaderSize = 0x16;
                break;

            default:
                throw new ArgumentException("Invalid hot heap version");
            }

            this.alignedHotTableHeaderSize = Utils.AlignUp(this.hotTableHeaderSize, HT_ALIGNMENT);
        }
示例#8
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="mdTable">The MD table</param>
 public HotTable40(IMDTable mdTable)
     : base(HotHeapVersion.CLR40, mdTable)
 {
 }
示例#9
0
 /// <summary>
 /// Creates a <see cref="HotTable"/> instance
 /// </summary>
 /// <param name="mdTable">The MD table</param>
 public abstract HotTable CreateHotTable(IMDTable mdTable);
示例#10
0
 /// <inheritdoc/>
 public override HotTable CreateHotTable(IMDTable mdTable)
 {
     return(new HotTable40(metadata, mdTable));
 }
示例#11
0
        /// <summary>
        /// Writes a metadata table
        /// </summary>
        /// <param name="writer">Writer</param>
        /// <param name="table">Table</param>
        public static void Write(this BinaryWriter writer, IMDTable table)
        {
            switch (table.Table)
            {
            case Table.Module: writer.Write((MDTable <RawModuleRow>)table); break;

            case Table.TypeRef: writer.Write((MDTable <RawTypeRefRow>)table); break;

            case Table.TypeDef: writer.Write((MDTable <RawTypeDefRow>)table); break;

            case Table.FieldPtr: writer.Write((MDTable <RawFieldPtrRow>)table); break;

            case Table.Field: writer.Write((MDTable <RawFieldRow>)table); break;

            case Table.MethodPtr: writer.Write((MDTable <RawMethodPtrRow>)table); break;

            case Table.Method: writer.Write((MDTable <RawMethodRow>)table); break;

            case Table.ParamPtr: writer.Write((MDTable <RawParamPtrRow>)table); break;

            case Table.Param: writer.Write((MDTable <RawParamRow>)table); break;

            case Table.InterfaceImpl: writer.Write((MDTable <RawInterfaceImplRow>)table); break;

            case Table.MemberRef: writer.Write((MDTable <RawMemberRefRow>)table); break;

            case Table.Constant: writer.Write((MDTable <RawConstantRow>)table); break;

            case Table.CustomAttribute: writer.Write((MDTable <RawCustomAttributeRow>)table); break;

            case Table.FieldMarshal: writer.Write((MDTable <RawFieldMarshalRow>)table); break;

            case Table.DeclSecurity: writer.Write((MDTable <RawDeclSecurityRow>)table); break;

            case Table.ClassLayout: writer.Write((MDTable <RawClassLayoutRow>)table); break;

            case Table.FieldLayout: writer.Write((MDTable <RawFieldLayoutRow>)table); break;

            case Table.StandAloneSig: writer.Write((MDTable <RawStandAloneSigRow>)table); break;

            case Table.EventMap: writer.Write((MDTable <RawEventMapRow>)table); break;

            case Table.EventPtr: writer.Write((MDTable <RawEventPtrRow>)table); break;

            case Table.Event: writer.Write((MDTable <RawEventRow>)table); break;

            case Table.PropertyMap: writer.Write((MDTable <RawPropertyMapRow>)table); break;

            case Table.PropertyPtr: writer.Write((MDTable <RawPropertyPtrRow>)table); break;

            case Table.Property: writer.Write((MDTable <RawPropertyRow>)table); break;

            case Table.MethodSemantics: writer.Write((MDTable <RawMethodSemanticsRow>)table); break;

            case Table.MethodImpl: writer.Write((MDTable <RawMethodImplRow>)table); break;

            case Table.ModuleRef: writer.Write((MDTable <RawModuleRefRow>)table); break;

            case Table.TypeSpec: writer.Write((MDTable <RawTypeSpecRow>)table); break;

            case Table.ImplMap: writer.Write((MDTable <RawImplMapRow>)table); break;

            case Table.FieldRVA: writer.Write((MDTable <RawFieldRVARow>)table); break;

            case Table.ENCLog: writer.Write((MDTable <RawENCLogRow>)table); break;

            case Table.ENCMap: writer.Write((MDTable <RawENCMapRow>)table); break;

            case Table.Assembly: writer.Write((MDTable <RawAssemblyRow>)table); break;

            case Table.AssemblyProcessor: writer.Write((MDTable <RawAssemblyProcessorRow>)table); break;

            case Table.AssemblyOS: writer.Write((MDTable <RawAssemblyOSRow>)table); break;

            case Table.AssemblyRef: writer.Write((MDTable <RawAssemblyRefRow>)table); break;

            case Table.AssemblyRefProcessor: writer.Write((MDTable <RawAssemblyRefProcessorRow>)table); break;

            case Table.AssemblyRefOS: writer.Write((MDTable <RawAssemblyRefOSRow>)table); break;

            case Table.File: writer.Write((MDTable <RawFileRow>)table); break;

            case Table.ExportedType: writer.Write((MDTable <RawExportedTypeRow>)table); break;

            case Table.ManifestResource: writer.Write((MDTable <RawManifestResourceRow>)table); break;

            case Table.NestedClass: writer.Write((MDTable <RawNestedClassRow>)table); break;

            case Table.GenericParam: writer.Write((MDTable <RawGenericParamRow>)table); break;

            case Table.MethodSpec: writer.Write((MDTable <RawMethodSpecRow>)table); break;

            case Table.GenericParamConstraint: writer.Write((MDTable <RawGenericParamConstraintRow>)table); break;

            default:
                var cols = table.TableInfo.Columns;
                foreach (var row in table.GetRawRows())
                {
                    foreach (var col in cols)
                    {
                        col.Write(writer, row.Read(col.Index));
                    }
                }
                break;
            }
        }
示例#12
0
文件: HotHeap.cs 项目: EmilZhou/dnlib
		/// <summary>
		/// Creates a <see cref="HotTable"/> instance
		/// </summary>
		/// <param name="mdTable">The MD table</param>
		public abstract HotTable CreateHotTable(IMDTable mdTable);
示例#13
0
文件: HotHeap.cs 项目: EmilZhou/dnlib
		/// <inheritdoc/>
		public override HotTable CreateHotTable(IMDTable mdTable) {
			return new HotTable40(mdTable);
		}
示例#14
0
        /// <summary>
        /// Writes a metadata table
        /// </summary>
        /// <param name="writer">Writer</param>
        /// <param name="metadata">Metadata</param>
        /// <param name="table">Table</param>
        public static void Write(this BinaryWriter writer, MetaData metadata, IMDTable table)
        {
            switch (table.Table)
            {
            case Table.Module:                      writer.Write(metadata, (MDTable <RawModuleRow>)table); break;

            case Table.TypeRef:                     writer.Write(metadata, (MDTable <RawTypeRefRow>)table); break;

            case Table.TypeDef:                     writer.Write(metadata, (MDTable <RawTypeDefRow>)table); break;

            case Table.FieldPtr:            writer.Write(metadata, (MDTable <RawFieldPtrRow>)table); break;

            case Table.Field:                       writer.Write(metadata, (MDTable <RawFieldRow>)table); break;

            case Table.MethodPtr:           writer.Write(metadata, (MDTable <RawMethodPtrRow>)table); break;

            case Table.Method:                      writer.Write(metadata, (MDTable <RawMethodRow>)table); break;

            case Table.ParamPtr:            writer.Write(metadata, (MDTable <RawParamPtrRow>)table); break;

            case Table.Param:                       writer.Write(metadata, (MDTable <RawParamRow>)table); break;

            case Table.InterfaceImpl:       writer.Write(metadata, (MDTable <RawInterfaceImplRow>)table); break;

            case Table.MemberRef:           writer.Write(metadata, (MDTable <RawMemberRefRow>)table); break;

            case Table.Constant:            writer.Write(metadata, (MDTable <RawConstantRow>)table); break;

            case Table.CustomAttribute:     writer.Write(metadata, (MDTable <RawCustomAttributeRow>)table); break;

            case Table.FieldMarshal:        writer.Write(metadata, (MDTable <RawFieldMarshalRow>)table); break;

            case Table.DeclSecurity:        writer.Write(metadata, (MDTable <RawDeclSecurityRow>)table); break;

            case Table.ClassLayout:         writer.Write(metadata, (MDTable <RawClassLayoutRow>)table); break;

            case Table.FieldLayout:         writer.Write(metadata, (MDTable <RawFieldLayoutRow>)table); break;

            case Table.StandAloneSig:       writer.Write(metadata, (MDTable <RawStandAloneSigRow>)table); break;

            case Table.EventMap:            writer.Write(metadata, (MDTable <RawEventMapRow>)table); break;

            case Table.EventPtr:            writer.Write(metadata, (MDTable <RawEventPtrRow>)table); break;

            case Table.Event:                       writer.Write(metadata, (MDTable <RawEventRow>)table); break;

            case Table.PropertyMap:         writer.Write(metadata, (MDTable <RawPropertyMapRow>)table); break;

            case Table.PropertyPtr:         writer.Write(metadata, (MDTable <RawPropertyPtrRow>)table); break;

            case Table.Property:            writer.Write(metadata, (MDTable <RawPropertyRow>)table); break;

            case Table.MethodSemantics:     writer.Write(metadata, (MDTable <RawMethodSemanticsRow>)table); break;

            case Table.MethodImpl:          writer.Write(metadata, (MDTable <RawMethodImplRow>)table); break;

            case Table.ModuleRef:           writer.Write(metadata, (MDTable <RawModuleRefRow>)table); break;

            case Table.TypeSpec:            writer.Write(metadata, (MDTable <RawTypeSpecRow>)table); break;

            case Table.ImplMap:                     writer.Write(metadata, (MDTable <RawImplMapRow>)table); break;

            case Table.FieldRVA:            writer.Write(metadata, (MDTable <RawFieldRVARow>)table); break;

            case Table.ENCLog:                      writer.Write(metadata, (MDTable <RawENCLogRow>)table); break;

            case Table.ENCMap:                      writer.Write(metadata, (MDTable <RawENCMapRow>)table); break;

            case Table.Assembly:            writer.Write(metadata, (MDTable <RawAssemblyRow>)table); break;

            case Table.AssemblyProcessor: writer.Write(metadata, (MDTable <RawAssemblyProcessorRow>)table); break;

            case Table.AssemblyOS:          writer.Write(metadata, (MDTable <RawAssemblyOSRow>)table); break;

            case Table.AssemblyRef:         writer.Write(metadata, (MDTable <RawAssemblyRefRow>)table); break;

            case Table.AssemblyRefProcessor: writer.Write(metadata, (MDTable <RawAssemblyRefProcessorRow>)table); break;

            case Table.AssemblyRefOS:       writer.Write(metadata, (MDTable <RawAssemblyRefOSRow>)table); break;

            case Table.File:                        writer.Write(metadata, (MDTable <RawFileRow>)table); break;

            case Table.ExportedType:        writer.Write(metadata, (MDTable <RawExportedTypeRow>)table); break;

            case Table.ManifestResource: writer.Write(metadata, (MDTable <RawManifestResourceRow>)table); break;

            case Table.NestedClass:         writer.Write(metadata, (MDTable <RawNestedClassRow>)table); break;

            case Table.GenericParam:        writer.Write(metadata, (MDTable <RawGenericParamRow>)table); break;

            case Table.MethodSpec:          writer.Write(metadata, (MDTable <RawMethodSpecRow>)table); break;

            case Table.GenericParamConstraint: writer.Write(metadata, (MDTable <RawGenericParamConstraintRow>)table); break;

            case Table.Document:            writer.Write(metadata, (MDTable <RawDocumentRow>)table); break;

            case Table.MethodDebugInformation: writer.Write(metadata, (MDTable <RawMethodDebugInformationRow>)table); break;

            case Table.LocalScope:          writer.Write(metadata, (MDTable <RawLocalScopeRow>)table); break;

            case Table.LocalVariable:       writer.Write(metadata, (MDTable <RawLocalVariableRow>)table); break;

            case Table.LocalConstant:       writer.Write(metadata, (MDTable <RawLocalConstantRow>)table); break;

            case Table.ImportScope:         writer.Write(metadata, (MDTable <RawImportScopeRow>)table); break;

            case Table.StateMachineMethod: writer.Write(metadata, (MDTable <RawStateMachineMethodRow>)table); break;

            case Table.CustomDebugInformation: writer.Write(metadata, (MDTable <RawCustomDebugInformationRow>)table); break;

            default:
                Debug.Fail(string.Format("Unknown table: {0}, add a new method overload", table.Table));
                var cols        = table.TableInfo.Columns;
                var stringsHeap = metadata.StringsHeap;
                foreach (var row in table.GetRawRows())
                {
                    foreach (var col in cols)
                    {
                        if (col.ColumnSize == ColumnSize.Strings)
                        {
                            col.Write(writer, stringsHeap.GetOffset(row.Read(col.Index)));
                        }
                        else
                        {
                            col.Write(writer, row.Read(col.Index));
                        }
                    }
                }
                break;
            }
        }
示例#15
0
		/// <summary>
		/// Constructor
		/// </summary>
		/// <param name="mdTable">The MD table</param>
		public HotTable40(IMDTable mdTable)
			: base(HotHeapVersion.CLR40, mdTable) {
		}
示例#16
0
 /// <inheritdoc/>
 public override HotTable CreateHotTable(IMDTable mdTable)
 {
     return(new HotTable20(mdTable));
 }
示例#17
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="metadata">Metadata owner</param>
 /// <param name="mdTable">The MD table</param>
 public HotTable40(MetaData metadata, IMDTable mdTable)
     : base(metadata, HotHeapVersion.CLR40, mdTable)
 {
 }