示例#1
0
		protected override HexField CreateField(ColumnInfo colInfo) {
			if (colInfo.Index == 0)
				return CreateTypeAttributesField(colInfo, mdVM.Buffer, Name, Span.Start);
			return base.CreateField(colInfo);
		}
示例#2
0
 protected override HexField CreateField(ColumnInfo colInfo)
 {
     if (colInfo.Index == 0) {
         var field = new UInt16FlagsHexField(mdVM.Document, Name, colInfo.Name, StartOffset + (uint)colInfo.Offset);
         field.Add(new BooleanHexBitField("NoMangle", 0));
         field.Add(new IntegerHexBitField("CharSet", 1, 2, CharSetInfos));
         field.Add(new IntegerHexBitField("BestFit", 4, 2, BestFitInfos));
         field.Add(new BooleanHexBitField("SupportsLastError", 6));
         field.Add(new IntegerHexBitField("CallConv", 8, 3, CallConvInfos));
         field.Add(new IntegerHexBitField("ThrowOnUnmappableChar", 12, 2, ThrowOnUnmappableCharInfos));
         return field;
     }
     return base.CreateField(colInfo);
 }
示例#3
0
 internal static UInt32FlagsHexField CreateAssemblyAttributesField(ColumnInfo colInfo, HexDocument doc, string name, ulong startOffset)
 {
     var field = new UInt32FlagsHexField(doc, name, colInfo.Name, startOffset + (uint)colInfo.Offset);
     field.Add(new BooleanHexBitField("PublicKey", 0));
     field.Add(new IntegerHexBitField("Processor Arch", 4, 3, PAInfos));
     field.Add(new BooleanHexBitField("Processor Arch Specified", 7));
     field.Add(new BooleanHexBitField("Retargetable", 8));
     field.Add(new IntegerHexBitField("ContentType", 9, 3, ContentTypeInfos));
     field.Add(new BooleanHexBitField("DisableJITcompileOptimizer", 14));
     field.Add(new BooleanHexBitField("EnableJITcompileTracking", 15));
     return field;
 }
示例#4
0
 protected override HexField CreateField(ColumnInfo colInfo)
 {
     if (colInfo.Index == 0) {
         var field = new UInt16FlagsHexField(mdVM.Document, Name, colInfo.Name, StartOffset + (uint)colInfo.Offset);
         field.Add(new IntegerHexBitField("Access", 0, 3, AccessInfos));
         field.Add(new BooleanHexBitField("Static", 4));
         field.Add(new BooleanHexBitField("InitOnly", 5));
         field.Add(new BooleanHexBitField("Literal", 6));
         field.Add(new BooleanHexBitField("NotSerialized", 7));
         field.Add(new BooleanHexBitField("HasFieldRVA", 8));
         field.Add(new BooleanHexBitField("SpecialName", 9));
         field.Add(new BooleanHexBitField("RTSpecialName", 10));
         field.Add(new BooleanHexBitField("HasFieldMarshal", 12));
         field.Add(new BooleanHexBitField("PinvokeImpl", 13));
         field.Add(new BooleanHexBitField("HasDefault", 15));
         return field;
     }
     return base.CreateField(colInfo);
 }
示例#5
0
 internal static UInt16FlagsHexField CreateGenericParamAttributesField(ColumnInfo colInfo, HexDocument doc, string name, ulong startOffset)
 {
     var field = new UInt16FlagsHexField(doc, name, colInfo.Name, startOffset + (uint)colInfo.Offset);
     field.Add(new IntegerHexBitField("Variance", 0, 2, VarianceInfos));
     field.Add(new BooleanHexBitField("Reference", 2));
     field.Add(new BooleanHexBitField("Struct", 3));
     field.Add(new BooleanHexBitField("Default ctor", 4));
     return field;
 }
示例#6
0
 protected override HexField CreateField(ColumnInfo colInfo)
 {
     if (1 <= colInfo.Index && colInfo.Index <= 2)
         return new UInt32HexField(mdVM.Document, Name, colInfo.Name, StartOffset + (uint)colInfo.Offset, true);
     return base.CreateField(colInfo);
 }
示例#7
0
 protected override HexField CreateField(ColumnInfo colInfo)
 {
     if (colInfo.Index == 0) {
         var field = new UInt16FlagsHexField(mdVM.Document, Name, colInfo.Name, StartOffset + (uint)colInfo.Offset);
         field.Add(new BooleanHexBitField("SpecialName", 9));
         field.Add(new BooleanHexBitField("RTSpecialName", 10));
         return field;
     }
     return base.CreateField(colInfo);
 }
 protected override HexField CreateField(ColumnInfo colInfo)
 {
     if (colInfo.Index == 0)
         return CreateTypeAttributesField(colInfo, doc, Name, startOffset);
     return base.CreateField(colInfo);
 }
 protected override HexField CreateField(ColumnInfo colInfo)
 {
     if (colInfo.Index == 1)
         return GenericParamMetaDataTableRecordVM.CreateGenericParamAttributesField(colInfo, doc, Name, startOffset);
     return base.CreateField(colInfo);
 }
示例#10
0
		/// <summary>
		/// Reads a column
		/// </summary>
		/// <param name="table">The table</param>
		/// <param name="rid">Row ID</param>
		/// <param name="column">Column</param>
		/// <param name="value">Result is put here or 0 if we return <c>false</c></param>
		/// <returns><c>true</c> if we could read the column, <c>false</c> otherwise</returns>
		internal bool ReadColumn_NoLock(MDTable table, uint rid, ColumnInfo column, out uint value) {
			if (table.IsInvalidRID(rid)) {
				value = 0;
				return false;
			}
			var cr = columnReader;
			if (cr != null && cr.ReadColumn(table, rid, column, out value))
				return true;
			var reader = GetReader_NoLock(table, rid);
			reader.Position += column.Offset;
			value = column.Read(reader);
			return true;
		}
示例#11
0
        string GetCodedTokenDescription(CodedToken codedToken, string codedTokenName, ColumnInfo col, HexField field)
        {
            MDToken token;
            if (!codedToken.Decode(ReadFieldValue(field), out token))
                return string.Empty;

            return string.Format("{0} Coded Token: {1}[{2}] (0x{3:X8})", codedTokenName, token.Table, token.Rid, token.Raw);
        }
示例#12
0
		/// <summary>
		/// Reads a column
		/// </summary>
		/// <param name="table">The table</param>
		/// <param name="rid">Row ID</param>
		/// <param name="column">Column</param>
		/// <param name="value">Result is put here or 0 if we return <c>false</c></param>
		/// <returns><c>true</c> if we could read the column, <c>false</c> otherwise</returns>
		public bool ReadColumn(MDTable table, uint rid, ColumnInfo column, out uint value) {
			if (table.IsInvalidRID(rid)) {
				value = 0;
				return false;
			}
			var cr = columnReader;
			if (cr != null && cr.ReadColumn(table, rid, column, out value))
				return true;
#if THREAD_SAFE
			theLock.EnterWriteLock(); try {
#endif
			var reader = GetReader_NoLock(table, rid);
			reader.Position += column.Offset;
			value = column.Read(reader);
#if THREAD_SAFE
			} finally { theLock.ExitWriteLock(); }
#endif
			return true;
		}
示例#13
0
		static object GetDescription(IMetaData metadata, MDTable table, ColumnInfo column, uint rowValue) {
			if (ColumnSize.Module <= column.ColumnSize && column.ColumnSize <= ColumnSize.GenericParamConstraint) {
				Table targetTable = (Table)(column.ColumnSize - ColumnSize.Module);

				if (rowValue == 0)
					return "";
				return new MDToken(targetTable, rowValue).ToDescription();
			}
			if (ColumnSize.TypeDefOrRef <= column.ColumnSize && column.ColumnSize <= ColumnSize.TypeOrMethodDef) {
				CodedToken info;
				switch (column.ColumnSize) {
					case ColumnSize.TypeDefOrRef:
						info = CodedToken.TypeDefOrRef;
						break;
					case ColumnSize.HasConstant:
						info = CodedToken.HasConstant;
						break;
					case ColumnSize.HasCustomAttribute:
						info = CodedToken.HasCustomAttribute;
						break;
					case ColumnSize.HasFieldMarshal:
						info = CodedToken.HasFieldMarshal;
						break;
					case ColumnSize.HasDeclSecurity:
						info = CodedToken.HasDeclSecurity;
						break;
					case ColumnSize.MemberRefParent:
						info = CodedToken.MemberRefParent;
						break;
					case ColumnSize.HasSemantic:
						info = CodedToken.HasSemantic;
						break;
					case ColumnSize.MethodDefOrRef:
						info = CodedToken.MethodDefOrRef;
						break;
					case ColumnSize.MemberForwarded:
						info = CodedToken.MemberForwarded;
						break;
					case ColumnSize.Implementation:
						info = CodedToken.Implementation;
						break;
					case ColumnSize.CustomAttributeType:
						info = CodedToken.CustomAttributeType;
						break;
					case ColumnSize.ResolutionScope:
						info = CodedToken.ResolutionScope;
						break;
					case ColumnSize.TypeOrMethodDef:
						info = CodedToken.TypeOrMethodDef;
						break;
					default:
						throw new InvalidOperationException(string.Format("Invalid ColumnSize: {0}", column.ColumnSize));
				}

				MDToken decodedToken;
				if (!info.Decode(rowValue, out decodedToken))
					return InvalidValue;

				if (decodedToken.Rid == 0)
					return "";
				return decodedToken.ToDescription();
			}
			if (column.ColumnSize == ColumnSize.Strings) {
				if (rowValue == 0)
					return "";

				var value = metadata.StringsStream.Read(rowValue);
				if (value == (UTF8String)null)
					return InvalidValue;
				return value;
			}
			if (column.ColumnSize == ColumnSize.Blob) {
				if (rowValue == 0)
					return "";

				if (!metadata.BlobStream.IsValidOffset(rowValue))
					return InvalidValue;

				var reader = metadata.BlobStream.GetClonedImageStream();
				reader.Position = rowValue;
				return reader.ReadCompressedUInt32();
			}
			if (column.ColumnSize == ColumnSize.GUID) {
				if (rowValue == 0)
					return "";

				var value = metadata.GuidStream.Read(rowValue);
				if (value == null)
					return InvalidValue;
				return value.Value.ToString("D");
			}
			return GetLiteralDescription(table.Table, column, rowValue);
		}
示例#14
0
		static string GetLiteralDescription(Table table, ColumnInfo column, uint rowValue) {
			object enumValue = null;
			switch (table) {
				case Table.TypeDef:
					if (column.Name == "Flags")
						enumValue = (TypeAttributes)rowValue;
					break;

				case Table.Field:
					if (column.Name == "Flags")
						enumValue = (FieldAttributes)rowValue;
					break;

				case Table.Method:
					if (column.Name == "ImplFlags")
						enumValue = (MethodImplAttributes)rowValue;
					else if (column.Name == "Flags")
						enumValue = (MethodAttributes)rowValue;
					break;

				case Table.Param:
					if (column.Name == "Flags")
						enumValue = (ParamAttributes)rowValue;
					break;

				case Table.Constant:
					if (column.Name == "Type")
						enumValue = (ElementType)rowValue;
					break;

				case Table.DeclSecurity:
					if (column.Name == "Action")
						enumValue = (SecurityAction)rowValue;
					break;

				case Table.Event:
					if (column.Name == "EventFlags")
						enumValue = (EventAttributes)rowValue;
					break;

				case Table.Property:
					if (column.Name == "Flags")
						enumValue = (PropertyAttributes)rowValue;
					break;

				case Table.MethodSemantics:
					if (column.Name == "Semantic")
						enumValue = (MethodSemanticsAttributes)rowValue;
					break;

				case Table.ImplMap:
					if (column.Name == "MappingFlags")
						enumValue = (PInvokeAttributes)rowValue;
					break;

				case Table.Assembly:
					if (column.Name == "HashAlgId")
						enumValue = (AssemblyHashAlgorithm)rowValue;
					else if (column.Name == "Flags")
						enumValue = (AssemblyAttributes)rowValue;
					break;

				case Table.AssemblyRef:
					if (column.Name == "Flags")
						enumValue = (AssemblyAttributes)rowValue;
					break;

				case Table.File:
					if (column.Name == "Flags")
						enumValue = (FileAttributes)rowValue;
					break;

				case Table.ExportedType:
					if (column.Name == "Flags")
						enumValue = (TypeAttributes)rowValue;
					break;

				case Table.ManifestResource:
					if (column.Name == "Flags")
						enumValue = (ManifestResourceAttributes)rowValue;
					break;

				case Table.GenericParam:
					if (column.Name == "Flags")
						enumValue = (GenericParamAttributes)rowValue;
					break;
			}


			if (enumValue == null)
				return "";
			return enumValue.ToString();
		}
示例#15
0
 internal static UInt32FlagsHexField CreateTypeAttributesField(ColumnInfo colInfo, HexDocument doc, string name, ulong startOffset)
 {
     var field = new UInt32FlagsHexField(doc, name, colInfo.Name, startOffset + (uint)colInfo.Offset);
     field.Add(new IntegerHexBitField("Visibility", 0, 3, VisibilityInfos));
     field.Add(new IntegerHexBitField("Layout", 3, 2, LayoutInfos));
     field.Add(new IntegerHexBitField("Semantics", 5, 1, SemanticsInfos));
     field.Add(new BooleanHexBitField("Abstract", 7));
     field.Add(new BooleanHexBitField("Sealed", 8));
     field.Add(new BooleanHexBitField("SpecialName", 10));
     field.Add(new BooleanHexBitField("RTSpecialName", 11));
     field.Add(new BooleanHexBitField("Import", 12));
     field.Add(new BooleanHexBitField("Serializable", 13));
     field.Add(new BooleanHexBitField("WindowsRuntime", 14));
     field.Add(new IntegerHexBitField("String", 16, 2, StringFormatInfos));
     field.Add(new BooleanHexBitField("HasSecurity", 18));
     field.Add(new BooleanHexBitField("BeforeFieldInit", 20));
     field.Add(new BooleanHexBitField("Forwarder", 21));
     field.Add(new IntegerHexBitField("Custom", 22, 2, CustomFormatInfos));
     return field;
 }
		uint ReadFieldValue(HexDocument doc, ColumnInfo col) {
			ulong start = StartOffset + (ulong)col.Offset;
			if (col.Size == 2)
				return doc.ReadUInt16(start);
			else if (col.Size == 4)
				return doc.ReadUInt32(start);
			throw new InvalidOperationException();
		}
示例#17
0
 protected override HexField CreateField(ColumnInfo colInfo)
 {
     if (0 <= colInfo.Index && colInfo.Index <= 3)
         return new UInt16HexField(mdVM.Document, Name, colInfo.Name, StartOffset + (uint)colInfo.Offset, true);
     else if (colInfo.Index == 4)
         return AssemblyMetaDataTableRecordVM.CreateAssemblyAttributesField(colInfo, mdVM.Document, Name, StartOffset);
     return base.CreateField(colInfo);
 }
示例#18
0
 protected override HexField CreateField(ColumnInfo colInfo)
 {
     if (colInfo.Index == 0) {
         var field = new UInt32FlagsHexField(mdVM.Document, Name, colInfo.Name, StartOffset + (uint)colInfo.Offset);
         field.Add(new IntegerHexBitField("Hash Algorithm", 0, 32, HashAlgoInfos));
         return field;
     }
     else if (1 <= colInfo.Index && colInfo.Index <= 4)
         return new UInt16HexField(mdVM.Document, Name, colInfo.Name, StartOffset + (uint)colInfo.Offset, true);
     else if (colInfo.Index == 5)
         return CreateAssemblyAttributesField(colInfo, mdVM.Document, Name, StartOffset);
     return base.CreateField(colInfo);
 }
示例#19
0
 protected override HexField CreateField(ColumnInfo colInfo)
 {
     if (colInfo.Index == 0) {
         var field = new Int16FlagsHexField(mdVM.Document, Name, colInfo.Name, StartOffset + (uint)colInfo.Offset);
         field.Add(new IntegerHexBitField("Action", 0, 16, SecurityActionInfos));
         return field;
     }
     return base.CreateField(colInfo);
 }
示例#20
0
        protected virtual HexField CreateField(ColumnInfo colInfo)
        {
            switch (colInfo.ColumnSize) {
            case ColumnSize.Int16: return new Int16HexField(mdVM.Document, Name, colInfo.Name, StartOffset + (uint)colInfo.Offset);
            case ColumnSize.Int32: return new Int32HexField(mdVM.Document, Name, colInfo.Name, StartOffset + (uint)colInfo.Offset);
            }

            switch (colInfo.Size) {
            case 1: return new ByteHexField(mdVM.Document, Name, colInfo.Name, StartOffset + (uint)colInfo.Offset);
            case 2: return new UInt16HexField(mdVM.Document, Name, colInfo.Name, StartOffset + (uint)colInfo.Offset);
            case 4: return new UInt32HexField(mdVM.Document, Name, colInfo.Name, StartOffset + (uint)colInfo.Offset);
            default: throw new InvalidOperationException();
            }
        }
示例#21
0
 protected override HexField CreateField(ColumnInfo colInfo)
 {
     if (colInfo.Index == 0)
         return TypeDefMetaDataTableRecordVM.CreateTypeAttributesField(colInfo, mdVM.Document, Name, StartOffset);
     return base.CreateField(colInfo);
 }
示例#22
0
        string GetCodedTokenDescription(CodedToken codedToken, string codedTokenName, ColumnInfo col, HexField field)
        {
            MDToken token;
            if (!codedToken.Decode(ReadFieldValue(field), out token))
                return string.Format("Invalid {0} Coded Token", codedTokenName);

            var info = GetInfo(token.Table, token.Rid);
            if (string.IsNullOrEmpty(info))
                return string.Format("{0}: {1}[{2}], 0x{3:X8})", codedTokenName, token.Table, token.Rid, token.Raw);
            return string.Format("{0} ({1}: {2}[{3}], 0x{4:X8})", info, codedTokenName, token.Table, token.Rid, token.Raw);
        }
示例#23
0
 protected override HexField CreateField(ColumnInfo colInfo)
 {
     if (colInfo.Index == 0) {
         var field = new UInt32FlagsHexField(mdVM.Document, Name, colInfo.Name, StartOffset + (uint)colInfo.Offset);
         field.Add(new BooleanHexBitField("ContainsNoMetaData", 0));
         return field;
     }
     return base.CreateField(colInfo);
 }
示例#24
0
 protected override HexField CreateField(ColumnInfo colInfo)
 {
     if (colInfo.Index == 1) {
         var field = new UInt16FlagsHexField(mdVM.Document, Name, colInfo.Name, StartOffset + (uint)colInfo.Offset);
         field.Add(new IntegerHexBitField("CodeType", 0, 2, CodeTypeInfos));
         field.Add(new IntegerHexBitField("ManagedType", 2, 1, ManagedInfos));
         field.Add(new BooleanHexBitField("NoInlining", 3));
         field.Add(new BooleanHexBitField("ForwardRef", 4));
         field.Add(new BooleanHexBitField("Synchronized", 5));
         field.Add(new BooleanHexBitField("NoOptimization", 6));
         field.Add(new BooleanHexBitField("PreserveSig", 7));
         field.Add(new BooleanHexBitField("AggressiveInlining", 8));
         field.Add(new BooleanHexBitField("InternalCall", 12));
         return field;
     }
     else if (colInfo.Index == 2) {
         var field = new UInt16FlagsHexField(mdVM.Document, Name, colInfo.Name, StartOffset + (uint)colInfo.Offset);
         field.Add(new IntegerHexBitField("Access", 0, 3, AccessInfos));
         field.Add(new BooleanHexBitField("UnmanagedExport", 3));
         field.Add(new BooleanHexBitField("Static", 4));
         field.Add(new BooleanHexBitField("Final", 5));
         field.Add(new BooleanHexBitField("Virtual", 6));
         field.Add(new BooleanHexBitField("HideBySig", 7));
         field.Add(new IntegerHexBitField("VtableLayout", 8, 1, VtableLayoutInfos));
         field.Add(new BooleanHexBitField("CheckAccessOnOverride", 9));
         field.Add(new BooleanHexBitField("Abstract", 10));
         field.Add(new BooleanHexBitField("SpecialName", 11));
         field.Add(new BooleanHexBitField("RTSpecialName", 12));
         field.Add(new BooleanHexBitField("PinvokeImpl", 13));
         field.Add(new BooleanHexBitField("HasSecurity", 14));
         field.Add(new BooleanHexBitField("RequireSecObject", 15));
         return field;
     }
     return base.CreateField(colInfo);
 }
示例#25
0
 protected override HexField CreateField(ColumnInfo colInfo)
 {
     if (colInfo.Index == 1)
         return CreateGenericParamAttributesField(colInfo, mdVM.Document, Name, StartOffset);
     return base.CreateField(colInfo);
 }
示例#26
0
 protected override HexField CreateField(ColumnInfo colInfo)
 {
     if (colInfo.Index == 0) {
         var field = new UInt16FlagsHexField(mdVM.Document, Name, colInfo.Name, StartOffset + (uint)colInfo.Offset);
         field.Add(new BooleanHexBitField("Setter", 0));
         field.Add(new BooleanHexBitField("Getter", 1));
         field.Add(new BooleanHexBitField("Other", 2));
         field.Add(new BooleanHexBitField("AddOn", 3));
         field.Add(new BooleanHexBitField("RemoveOn", 4));
         field.Add(new BooleanHexBitField("Fire", 5));
         return field;
     }
     return base.CreateField(colInfo);
 }
示例#27
0
 protected override HexField CreateField(ColumnInfo colInfo)
 {
     if (colInfo.Index == 1) {
         var field = new UInt32FlagsHexField(mdVM.Document, Name, colInfo.Name, StartOffset + (uint)colInfo.Offset);
         field.Add(new IntegerHexBitField("Visibility", 0, 3, VisibilityInfos));
         return field;
     }
     return base.CreateField(colInfo);
 }
示例#28
0
 protected override HexField CreateField(ColumnInfo colInfo)
 {
     if (colInfo.Index == 0) {
         var field = new UInt16FlagsHexField(mdVM.Document, Name, colInfo.Name, StartOffset + (uint)colInfo.Offset);
         field.Add(new BooleanHexBitField("In", 0));
         field.Add(new BooleanHexBitField("Out", 1));
         field.Add(new BooleanHexBitField("Optional", 4));
         field.Add(new BooleanHexBitField("HasDefault", 12));
         field.Add(new BooleanHexBitField("HasFieldMarshal", 13));
         return field;
     }
     return base.CreateField(colInfo);
 }
		uint ReadFieldValue(HexBuffer buffer, ColumnInfo col) {
			var start = Span.Start + (ulong)col.Offset;
			if (col.Size == 2)
				return buffer.ReadUInt16(start);
			else if (col.Size == 4)
				return buffer.ReadUInt32(start);
			throw new InvalidOperationException();
		}
示例#30
0
		protected override HexField CreateField(ColumnInfo colInfo) {
			if (colInfo.Index == 1)
				return GenericParamMetaDataTableRecordVM.CreateGenericParamAttributesField(colInfo, mdVM.Buffer, Name, Span.Start);
			return base.CreateField(colInfo);
		}