public FieldAndStructure(HexVM structure, HexField field) { if (structure == null) { throw new ArgumentNullException(nameof(structure)); } if (field == null) { throw new ArgumentNullException(nameof(field)); } Structure = structure; Field = field; }
public HexFieldReference(HexBufferFile file, HexVM structure, HexField field) { if (file == null) { throw new ArgumentNullException(nameof(file)); } if (structure == null) { throw new ArgumentNullException(nameof(structure)); } if (field == null) { throw new ArgumentNullException(nameof(field)); } File = file; Structure = structure; Field = field; }
public HexFieldReference(HexBufferFile file, HexVM structure, HexField field) { File = file ?? throw new ArgumentNullException(nameof(file)); Structure = structure ?? throw new ArgumentNullException(nameof(structure)); Field = field ?? throw new ArgumentNullException(nameof(field)); }
uint ReadFieldValue(HexField field) { if (field.Size == 2) return mdVM.Buffer.ReadUInt16(field.Span.Start); else if (field.Size == 4) return mdVM.Buffer.ReadUInt32(field.Span.Start); return 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); }
string GetDescription(Table table, HexField field) { var info = GetInfo(table, ReadFieldValue(field)); if (string.IsNullOrEmpty(info)) return string.Format("{0} RID", table); return string.Format("{0} ({1} RID)", info, table); }
string GetGuidDescription(HexField field) { var g = ReadGuidHeap(field); if (g != null) return string.Format("{0} (#GUID Heap Index)", g.Value.ToString()); return "#GUID Heap Index"; }
string GetStringsDescription(HexField field) { var s = ReadStringsHeap(field); if (!string.IsNullOrEmpty(s)) return string.Format("{0} (#Strings Heap Offset)", s); return "#Strings Heap Offset"; }
Guid? ReadGuidHeap(HexField field) => mdVM.ReadGuidHeap(ReadFieldValue(field));
protected string ReadStringsHeap(HexField field) { var s = SimpleTypeConverter.ToString(mdVM.ReadStringsHeap(ReadFieldValue(field)), false); Debug.Assert(s.Length >= 2); if (s.Length < 2) return s; return s.Substring(1, s.Length - 2); }