/*
Copyright (C) 2014-2019 de4dot@gmail.com
This file is part of dnSpy
dnSpy is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
dnSpy is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with dnSpy. If not, see .
*/
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
using dnSpy.AsmEditor.Properties;
using dnSpy.Contracts.Hex;
using dnSpy.Contracts.Hex.Files.DotNet;
namespace dnSpy.AsmEditor.Hex.PE {
abstract class MetadataTableVM : HexVM {
public Table Table => TableInfo.Table;
public uint Rows { get; }
public TableInfo TableInfo { get; }
public override string Name => $"{(byte)TableInfo.Table:X2} {TableInfo.Table}";
public string Column0Name => GetColumnName(0);
public string Column1Name => GetColumnName(1);
public string Column2Name => GetColumnName(2);
public string Column3Name => GetColumnName(3);
public string Column4Name => GetColumnName(4);
public string Column5Name => GetColumnName(5);
public string Column6Name => GetColumnName(6);
public string Column7Name => GetColumnName(7);
public string Column8Name => GetColumnName(8);
public string Column9Name => GetColumnName(9);
public string GetColumnName(int col) {
Debug.Assert(col < TableInfo.Columns.Count);
if (col >= TableInfo.Columns.Count)
return string.Empty;
return TableInfo.Columns[col].Name;
}
public string InfoName => dnSpy_AsmEditor_Resources.Info;
public virtual bool HasInfo => false;
public override IEnumerable HexFields => hexFields;
readonly HexField[] hexFields = Array.Empty();
public VirtualizedList Collection { get; }
public object? SelectedItem {
get => selectedItem;
set {
if (selectedItem != value) {
selectedItem = value;
OnPropertyChanged(nameof(SelectedItem));
}
}
}
object? selectedItem;
public HexBuffer Buffer => buffer;
public TablesStreamVM TablesStream { get; }
public object? Owner { get; set; }
readonly HexBuffer buffer;
readonly HexSpan stringsHeapSpan;
readonly HexSpan guidHeapSpan;
protected MetadataTableVM(HexBuffer buffer, TablesStreamVM tablesStream, MDTable mdTable, HexSpan stringsHeapSpan, HexSpan guidHeapSpan)
: base(mdTable.Span) {
this.buffer = buffer;
TablesStream = tablesStream;
this.stringsHeapSpan = stringsHeapSpan;
this.guidHeapSpan = guidHeapSpan;
Rows = mdTable.Rows;
TableInfo = CreateTableInfo(mdTable.TableInfo);
Collection = new VirtualizedList((int)Rows, CreateItem);
}
MetadataTableRecordVM CreateItem(int index) {
Debug.Assert(index >= 0 && (uint)index < Rows);
switch (TableInfo.Table) {
case Table.Module: return new ModuleMetadataTableRecordVM(this, new MDToken(TableInfo.Table, index + 1));
case Table.TypeRef: return new TypeRefMetadataTableRecordVM(this, new MDToken(TableInfo.Table, index + 1));
case Table.TypeDef: return new TypeDefMetadataTableRecordVM(this, new MDToken(TableInfo.Table, index + 1));
case Table.FieldPtr: return new FieldPtrMetadataTableRecordVM(this, new MDToken(TableInfo.Table, index + 1));
case Table.Field: return new FieldMetadataTableRecordVM(this, new MDToken(TableInfo.Table, index + 1));
case Table.MethodPtr: return new MethodPtrMetadataTableRecordVM(this, new MDToken(TableInfo.Table, index + 1));
case Table.Method: return new MethodMetadataTableRecordVM(this, new MDToken(TableInfo.Table, index + 1));
case Table.ParamPtr: return new ParamPtrMetadataTableRecordVM(this, new MDToken(TableInfo.Table, index + 1));
case Table.Param: return new ParamMetadataTableRecordVM(this, new MDToken(TableInfo.Table, index + 1));
case Table.InterfaceImpl: return new InterfaceImplMetadataTableRecordVM(this, new MDToken(TableInfo.Table, index + 1));
case Table.MemberRef: return new MemberRefMetadataTableRecordVM(this, new MDToken(TableInfo.Table, index + 1));
case Table.Constant: return new ConstantMetadataTableRecordVM(this, new MDToken(TableInfo.Table, index + 1));
case Table.CustomAttribute: return new CustomAttributeMetadataTableRecordVM(this, new MDToken(TableInfo.Table, index + 1));
case Table.FieldMarshal: return new FieldMarshalMetadataTableRecordVM(this, new MDToken(TableInfo.Table, index + 1));
case Table.DeclSecurity: return new DeclSecurityMetadataTableRecordVM(this, new MDToken(TableInfo.Table, index + 1));
case Table.ClassLayout: return new ClassLayoutMetadataTableRecordVM(this, new MDToken(TableInfo.Table, index + 1));
case Table.FieldLayout: return new FieldLayoutMetadataTableRecordVM(this, new MDToken(TableInfo.Table, index + 1));
case Table.StandAloneSig: return new StandAloneSigMetadataTableRecordVM(this, new MDToken(TableInfo.Table, index + 1));
case Table.EventMap: return new EventMapMetadataTableRecordVM(this, new MDToken(TableInfo.Table, index + 1));
case Table.EventPtr: return new EventPtrMetadataTableRecordVM(this, new MDToken(TableInfo.Table, index + 1));
case Table.Event: return new EventMetadataTableRecordVM(this, new MDToken(TableInfo.Table, index + 1));
case Table.PropertyMap: return new PropertyMapMetadataTableRecordVM(this, new MDToken(TableInfo.Table, index + 1));
case Table.PropertyPtr: return new PropertyPtrMetadataTableRecordVM(this, new MDToken(TableInfo.Table, index + 1));
case Table.Property: return new PropertyMetadataTableRecordVM(this, new MDToken(TableInfo.Table, index + 1));
case Table.MethodSemantics: return new MethodSemanticsMetadataTableRecordVM(this, new MDToken(TableInfo.Table, index + 1));
case Table.MethodImpl: return new MethodImplMetadataTableRecordVM(this, new MDToken(TableInfo.Table, index + 1));
case Table.ModuleRef: return new ModuleRefMetadataTableRecordVM(this, new MDToken(TableInfo.Table, index + 1));
case Table.TypeSpec: return new TypeSpecMetadataTableRecordVM(this, new MDToken(TableInfo.Table, index + 1));
case Table.ImplMap: return new ImplMapMetadataTableRecordVM(this, new MDToken(TableInfo.Table, index + 1));
case Table.FieldRVA: return new FieldRVAMetadataTableRecordVM(this, new MDToken(TableInfo.Table, index + 1));
case Table.ENCLog: return new ENCLogMetadataTableRecordVM(this, new MDToken(TableInfo.Table, index + 1));
case Table.ENCMap: return new ENCMapMetadataTableRecordVM(this, new MDToken(TableInfo.Table, index + 1));
case Table.Assembly: return new AssemblyMetadataTableRecordVM(this, new MDToken(TableInfo.Table, index + 1));
case Table.AssemblyProcessor: return new AssemblyProcessorMetadataTableRecordVM(this, new MDToken(TableInfo.Table, index + 1));
case Table.AssemblyOS: return new AssemblyOSMetadataTableRecordVM(this, new MDToken(TableInfo.Table, index + 1));
case Table.AssemblyRef: return new AssemblyRefMetadataTableRecordVM(this, new MDToken(TableInfo.Table, index + 1));
case Table.AssemblyRefProcessor: return new AssemblyRefProcessorMetadataTableRecordVM(this, new MDToken(TableInfo.Table, index + 1));
case Table.AssemblyRefOS: return new AssemblyRefOSMetadataTableRecordVM(this, new MDToken(TableInfo.Table, index + 1));
case Table.File: return new FileMetadataTableRecordVM(this, new MDToken(TableInfo.Table, index + 1));
case Table.ExportedType: return new ExportedTypeMetadataTableRecordVM(this, new MDToken(TableInfo.Table, index + 1));
case Table.ManifestResource: return new ManifestResourceMetadataTableRecordVM(this, new MDToken(TableInfo.Table, index + 1));
case Table.NestedClass: return new NestedClassMetadataTableRecordVM(this, new MDToken(TableInfo.Table, index + 1));
case Table.GenericParam: return TableInfo.Columns.Count == 5 ? (MetadataTableRecordVM)new GenericParamMetadataTableRecordV11VM(this, new MDToken(TableInfo.Table, index + 1)) : new GenericParamMetadataTableRecordVM(this, new MDToken(TableInfo.Table, index + 1));
case Table.MethodSpec: return new MethodSpecMetadataTableRecordVM(this, new MDToken(TableInfo.Table, index + 1));
case Table.GenericParamConstraint: return new GenericParamConstraintMetadataTableRecordVM(this, new MDToken(TableInfo.Table, index + 1));
case Table.Document: return new DocumentMetadataTableRecordVM(this, new MDToken(TableInfo.Table, index + 1));
case Table.MethodDebugInformation: return new MethodDebugInformationMetadataTableRecordVM(this, new MDToken(TableInfo.Table, index + 1));
case Table.LocalScope: return new LocalScopeMetadataTableRecordVM(this, new MDToken(TableInfo.Table, index + 1));
case Table.LocalVariable: return new LocalVariableMetadataTableRecordVM(this, new MDToken(TableInfo.Table, index + 1));
case Table.LocalConstant: return new LocalConstantMetadataTableRecordVM(this, new MDToken(TableInfo.Table, index + 1));
case Table.ImportScope: return new ImportScopeMetadataTableRecordVM(this, new MDToken(TableInfo.Table, index + 1));
case Table.StateMachineMethod: return new StateMachineMethodMetadataTableRecordVM(this, new MDToken(TableInfo.Table, index + 1));
case Table.CustomDebugInformation: return new CustomDebugInformationMetadataTableRecordVM(this, new MDToken(TableInfo.Table, index + 1));
default: throw new InvalidOperationException();
}
}
public static MetadataTableVM Create(HexBuffer buffer, TablesStreamVM tablesStream, MDTable mdTable, HexSpan stringsHeapSpan, HexSpan guidHeapSpan) {
switch (mdTable.Table) {
case Table.Module: return new ModuleMetadataTableVM(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan);
case Table.TypeRef: return new TypeRefMetadataTableVM(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan);
case Table.TypeDef: return new TypeDefMetadataTableVM(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan);
case Table.FieldPtr: return new FieldPtrMetadataTableVM(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan);
case Table.Field: return new FieldMetadataTableVM(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan);
case Table.MethodPtr: return new MethodPtrMetadataTableVM(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan);
case Table.Method: return new MethodMetadataTableVM(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan);
case Table.ParamPtr: return new ParamPtrMetadataTableVM(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan);
case Table.Param: return new ParamMetadataTableVM(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan);
case Table.InterfaceImpl: return new InterfaceImplMetadataTableVM(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan);
case Table.MemberRef: return new MemberRefMetadataTableVM(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan);
case Table.Constant: return new ConstantMetadataTableVM(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan);
case Table.CustomAttribute: return new CustomAttributeMetadataTableVM(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan);
case Table.FieldMarshal: return new FieldMarshalMetadataTableVM(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan);
case Table.DeclSecurity: return new DeclSecurityMetadataTableVM(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan);
case Table.ClassLayout: return new ClassLayoutMetadataTableVM(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan);
case Table.FieldLayout: return new FieldLayoutMetadataTableVM(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan);
case Table.StandAloneSig: return new StandAloneSigMetadataTableVM(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan);
case Table.EventMap: return new EventMapMetadataTableVM(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan);
case Table.EventPtr: return new EventPtrMetadataTableVM(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan);
case Table.Event: return new EventMetadataTableVM(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan);
case Table.PropertyMap: return new PropertyMapMetadataTableVM(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan);
case Table.PropertyPtr: return new PropertyPtrMetadataTableVM(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan);
case Table.Property: return new PropertyMetadataTableVM(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan);
case Table.MethodSemantics: return new MethodSemanticsMetadataTableVM(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan);
case Table.MethodImpl: return new MethodImplMetadataTableVM(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan);
case Table.ModuleRef: return new ModuleRefMetadataTableVM(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan);
case Table.TypeSpec: return new TypeSpecMetadataTableVM(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan);
case Table.ImplMap: return new ImplMapMetadataTableVM(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan);
case Table.FieldRVA: return new FieldRVAMetadataTableVM(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan);
case Table.ENCLog: return new ENCLogMetadataTableVM(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan);
case Table.ENCMap: return new ENCMapMetadataTableVM(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan);
case Table.Assembly: return new AssemblyMetadataTableVM(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan);
case Table.AssemblyProcessor: return new AssemblyProcessorMetadataTableVM(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan);
case Table.AssemblyOS: return new AssemblyOSMetadataTableVM(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan);
case Table.AssemblyRef: return new AssemblyRefMetadataTableVM(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan);
case Table.AssemblyRefProcessor: return new AssemblyRefProcessorMetadataTableVM(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan);
case Table.AssemblyRefOS: return new AssemblyRefOSMetadataTableVM(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan);
case Table.File: return new FileMetadataTableVM(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan);
case Table.ExportedType: return new ExportedTypeMetadataTableVM(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan);
case Table.ManifestResource: return new ManifestResourceMetadataTableVM(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan);
case Table.NestedClass: return new NestedClassMetadataTableVM(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan);
case Table.GenericParam: return mdTable.Columns.Count == 5 ? (MetadataTableVM)new GenericParamMetadataTableV11VM(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan) : new GenericParamMetadataTableVM(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan);
case Table.MethodSpec: return new MethodSpecMetadataTableVM(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan);
case Table.GenericParamConstraint: return new GenericParamConstraintMetadataTableVM(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan);
case Table.Document: return new DocumentMetadataTableVM(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan);
case Table.MethodDebugInformation: return new MethodDebugInformationMetadataTableVM(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan);
case Table.LocalScope: return new LocalScopeMetadataTableVM(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan);
case Table.LocalVariable: return new LocalVariableMetadataTableVM(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan);
case Table.LocalConstant: return new LocalConstantMetadataTableVM(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan);
case Table.ImportScope: return new ImportScopeMetadataTableVM(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan);
case Table.StateMachineMethod: return new StateMachineMethodMetadataTableVM(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan);
case Table.CustomDebugInformation: return new CustomDebugInformationMetadataTableVM(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan);
default: throw new InvalidOperationException();
}
}
static TableInfo CreateTableInfo(TableInfo info) {
var newCols = new List(info.Columns.Count + 1);
int offs = 0;
for (int i = 0, coli = 0; i < info.Columns.Count; i++, coli++) {
var col = info.Columns[i];
newCols.Add(new ColumnInfo((byte)coli, col.Name, col.ColumnSize, (byte)offs, (byte)col.Size));
offs += col.Size;
int nextOffs = i + 1 >= info.Columns.Count ? info.RowSize : info.Columns[i + 1].Offset;
int padding = nextOffs - (col.Offset + col.Size);
for (int j = 0; j < padding; j++) {
newCols.Add(new ColumnInfo((byte)(coli++ + 1), dnSpy_AsmEditor_Resources.Padding, ColumnSize.Byte, (byte)offs, 1));
offs++;
}
}
return new TableInfo(info.Table, info.Name, newCols.ToArray(), offs);
}
public override void OnBufferChanged(NormalizedHexChangeCollection changes) {
foreach (var change in changes) {
if (!change.OldSpan.OverlapsWith(Span))
continue;
var start = HexPosition.Max(Span.Start, change.OldSpan.Start);
var end = HexPosition.Min(Span.End, change.OldSpan.End);
int i = (int)((start - Span.Start).ToUInt64() / (ulong)TableInfo.RowSize);
int endi = (int)((end - 1 - Span.Start).ToUInt64() / (ulong)TableInfo.RowSize);
Debug.Assert(0 <= i && i <= endi && endi < Collection.Count);
while (i <= endi) {
var obj = Collection.TryGet(i);
if (obj is not null)
obj.OnBufferChanged(changes);
i++;
}
}
}
public MetadataTableRecordVM Get(int index) => Collection[index];
public MetadataTableRecordVM? TryGet(int index) => Collection.TryGet(index);
public string ReadStringsHeap(uint offset, uint maxLen = 0x200) {
if (offset == 0)
return string.Empty;
var offs = stringsHeapSpan.Start + offset;
var bytes = new List();
bool tooLongString = false;
while (offs < stringsHeapSpan.End) {
int b = buffer.TryReadByte(offs);
if (b <= 0)
break;
if (bytes.Count >= maxLen) {
tooLongString = true;
break;
}
bytes.Add((byte)b);
offs++;
}
var s = Encoding.UTF8.GetString(bytes.ToArray());
return tooLongString ? s + "..." : s;
}
public Guid? ReadGuidHeap(uint index) {
if (index == 0)
return null;
var offs = guidHeapSpan.Start + (index - 1) * 16;
var bytes = new byte[16];
int i = 0;
while (offs < guidHeapSpan.End) {
int b = buffer.TryReadByte(offs);
if (b < 0)
break;
bytes[i++] = (byte)b;
offs++;
if (i == 16)
return new Guid(bytes);
}
return null;
}
}
abstract class MetadataTable1VM : MetadataTableVM {
public MetadataTable1VM(HexBuffer buffer, TablesStreamVM tablesStream, MDTable mdTable, HexSpan stringsHeapSpan, HexSpan guidHeapSpan)
: base(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan) {
}
}
abstract class MetadataTable2VM : MetadataTableVM {
public MetadataTable2VM(HexBuffer buffer, TablesStreamVM tablesStream, MDTable mdTable, HexSpan stringsHeapSpan, HexSpan guidHeapSpan)
: base(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan) {
}
}
abstract class MetadataTable3VM : MetadataTableVM {
public MetadataTable3VM(HexBuffer buffer, TablesStreamVM tablesStream, MDTable mdTable, HexSpan stringsHeapSpan, HexSpan guidHeapSpan)
: base(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan) {
}
}
abstract class MetadataTable4VM : MetadataTableVM {
public MetadataTable4VM(HexBuffer buffer, TablesStreamVM tablesStream, MDTable mdTable, HexSpan stringsHeapSpan, HexSpan guidHeapSpan)
: base(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan) {
}
}
abstract class MetadataTable5VM : MetadataTableVM {
public MetadataTable5VM(HexBuffer buffer, TablesStreamVM tablesStream, MDTable mdTable, HexSpan stringsHeapSpan, HexSpan guidHeapSpan)
: base(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan) {
}
}
abstract class MetadataTable6VM : MetadataTableVM {
public MetadataTable6VM(HexBuffer buffer, TablesStreamVM tablesStream, MDTable mdTable, HexSpan stringsHeapSpan, HexSpan guidHeapSpan)
: base(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan) {
}
}
abstract class MetadataTable9VM : MetadataTableVM {
public MetadataTable9VM(HexBuffer buffer, TablesStreamVM tablesStream, MDTable mdTable, HexSpan stringsHeapSpan, HexSpan guidHeapSpan)
: base(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan) {
}
}
abstract class MetadataTable1InfoVM : MetadataTable1VM {
public override bool HasInfo => true;
public MetadataTable1InfoVM(HexBuffer buffer, TablesStreamVM tablesStream, MDTable mdTable, HexSpan stringsHeapSpan, HexSpan guidHeapSpan)
: base(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan) {
}
}
abstract class MetadataTable2InfoVM : MetadataTable2VM {
public override bool HasInfo => true;
public MetadataTable2InfoVM(HexBuffer buffer, TablesStreamVM tablesStream, MDTable mdTable, HexSpan stringsHeapSpan, HexSpan guidHeapSpan)
: base(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan) {
}
}
abstract class MetadataTable3InfoVM : MetadataTable3VM {
public override bool HasInfo => true;
public MetadataTable3InfoVM(HexBuffer buffer, TablesStreamVM tablesStream, MDTable mdTable, HexSpan stringsHeapSpan, HexSpan guidHeapSpan)
: base(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan) {
}
}
abstract class MetadataTable4InfoVM : MetadataTable4VM {
public override bool HasInfo => true;
public MetadataTable4InfoVM(HexBuffer buffer, TablesStreamVM tablesStream, MDTable mdTable, HexSpan stringsHeapSpan, HexSpan guidHeapSpan)
: base(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan) {
}
}
abstract class MetadataTable5InfoVM : MetadataTable5VM {
public override bool HasInfo => true;
public MetadataTable5InfoVM(HexBuffer buffer, TablesStreamVM tablesStream, MDTable mdTable, HexSpan stringsHeapSpan, HexSpan guidHeapSpan)
: base(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan) {
}
}
abstract class MetadataTable6InfoVM : MetadataTable6VM {
public override bool HasInfo => true;
public MetadataTable6InfoVM(HexBuffer buffer, TablesStreamVM tablesStream, MDTable mdTable, HexSpan stringsHeapSpan, HexSpan guidHeapSpan)
: base(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan) {
}
}
abstract class MetadataTable9InfoVM : MetadataTable9VM {
public override bool HasInfo => true;
public MetadataTable9InfoVM(HexBuffer buffer, TablesStreamVM tablesStream, MDTable mdTable, HexSpan stringsHeapSpan, HexSpan guidHeapSpan)
: base(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan) {
}
}
sealed class ModuleMetadataTableVM : MetadataTable5InfoVM {
public ModuleMetadataTableVM(HexBuffer buffer, TablesStreamVM tablesStream, MDTable mdTable, HexSpan stringsHeapSpan, HexSpan guidHeapSpan)
: base(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan) {
}
}
sealed class TypeRefMetadataTableVM : MetadataTable3InfoVM {
public TypeRefMetadataTableVM(HexBuffer buffer, TablesStreamVM tablesStream, MDTable mdTable, HexSpan stringsHeapSpan, HexSpan guidHeapSpan)
: base(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan) {
}
}
sealed class TypeDefMetadataTableVM : MetadataTable6InfoVM {
public TypeDefMetadataTableVM(HexBuffer buffer, TablesStreamVM tablesStream, MDTable mdTable, HexSpan stringsHeapSpan, HexSpan guidHeapSpan)
: base(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan) {
}
}
sealed class FieldPtrMetadataTableVM : MetadataTable1VM {
public FieldPtrMetadataTableVM(HexBuffer buffer, TablesStreamVM tablesStream, MDTable mdTable, HexSpan stringsHeapSpan, HexSpan guidHeapSpan)
: base(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan) {
}
}
sealed class FieldMetadataTableVM : MetadataTable3InfoVM {
public FieldMetadataTableVM(HexBuffer buffer, TablesStreamVM tablesStream, MDTable mdTable, HexSpan stringsHeapSpan, HexSpan guidHeapSpan)
: base(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan) {
}
}
sealed class MethodPtrMetadataTableVM : MetadataTable1VM {
public MethodPtrMetadataTableVM(HexBuffer buffer, TablesStreamVM tablesStream, MDTable mdTable, HexSpan stringsHeapSpan, HexSpan guidHeapSpan)
: base(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan) {
}
}
sealed class MethodMetadataTableVM : MetadataTable6InfoVM {
public MethodMetadataTableVM(HexBuffer buffer, TablesStreamVM tablesStream, MDTable mdTable, HexSpan stringsHeapSpan, HexSpan guidHeapSpan)
: base(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan) {
}
}
sealed class ParamPtrMetadataTableVM : MetadataTable1VM {
public ParamPtrMetadataTableVM(HexBuffer buffer, TablesStreamVM tablesStream, MDTable mdTable, HexSpan stringsHeapSpan, HexSpan guidHeapSpan)
: base(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan) {
}
}
sealed class ParamMetadataTableVM : MetadataTable3InfoVM {
public ParamMetadataTableVM(HexBuffer buffer, TablesStreamVM tablesStream, MDTable mdTable, HexSpan stringsHeapSpan, HexSpan guidHeapSpan)
: base(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan) {
}
}
sealed class InterfaceImplMetadataTableVM : MetadataTable2VM {
public InterfaceImplMetadataTableVM(HexBuffer buffer, TablesStreamVM tablesStream, MDTable mdTable, HexSpan stringsHeapSpan, HexSpan guidHeapSpan)
: base(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan) {
}
}
sealed class MemberRefMetadataTableVM : MetadataTable3InfoVM {
public MemberRefMetadataTableVM(HexBuffer buffer, TablesStreamVM tablesStream, MDTable mdTable, HexSpan stringsHeapSpan, HexSpan guidHeapSpan)
: base(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan) {
}
}
sealed class ConstantMetadataTableVM : MetadataTable4VM {
public ConstantMetadataTableVM(HexBuffer buffer, TablesStreamVM tablesStream, MDTable mdTable, HexSpan stringsHeapSpan, HexSpan guidHeapSpan)
: base(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan) {
}
}
sealed class CustomAttributeMetadataTableVM : MetadataTable3VM {
public CustomAttributeMetadataTableVM(HexBuffer buffer, TablesStreamVM tablesStream, MDTable mdTable, HexSpan stringsHeapSpan, HexSpan guidHeapSpan)
: base(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan) {
}
}
sealed class FieldMarshalMetadataTableVM : MetadataTable2VM {
public FieldMarshalMetadataTableVM(HexBuffer buffer, TablesStreamVM tablesStream, MDTable mdTable, HexSpan stringsHeapSpan, HexSpan guidHeapSpan)
: base(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan) {
}
}
sealed class DeclSecurityMetadataTableVM : MetadataTable3VM {
public DeclSecurityMetadataTableVM(HexBuffer buffer, TablesStreamVM tablesStream, MDTable mdTable, HexSpan stringsHeapSpan, HexSpan guidHeapSpan)
: base(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan) {
}
}
sealed class ClassLayoutMetadataTableVM : MetadataTable3VM {
public ClassLayoutMetadataTableVM(HexBuffer buffer, TablesStreamVM tablesStream, MDTable mdTable, HexSpan stringsHeapSpan, HexSpan guidHeapSpan)
: base(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan) {
}
}
sealed class FieldLayoutMetadataTableVM : MetadataTable2VM {
public FieldLayoutMetadataTableVM(HexBuffer buffer, TablesStreamVM tablesStream, MDTable mdTable, HexSpan stringsHeapSpan, HexSpan guidHeapSpan)
: base(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan) {
}
}
sealed class StandAloneSigMetadataTableVM : MetadataTable1VM {
public StandAloneSigMetadataTableVM(HexBuffer buffer, TablesStreamVM tablesStream, MDTable mdTable, HexSpan stringsHeapSpan, HexSpan guidHeapSpan)
: base(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan) {
}
}
sealed class EventMapMetadataTableVM : MetadataTable2VM {
public EventMapMetadataTableVM(HexBuffer buffer, TablesStreamVM tablesStream, MDTable mdTable, HexSpan stringsHeapSpan, HexSpan guidHeapSpan)
: base(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan) {
}
}
sealed class EventPtrMetadataTableVM : MetadataTable1VM {
public EventPtrMetadataTableVM(HexBuffer buffer, TablesStreamVM tablesStream, MDTable mdTable, HexSpan stringsHeapSpan, HexSpan guidHeapSpan)
: base(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan) {
}
}
sealed class EventMetadataTableVM : MetadataTable3InfoVM {
public EventMetadataTableVM(HexBuffer buffer, TablesStreamVM tablesStream, MDTable mdTable, HexSpan stringsHeapSpan, HexSpan guidHeapSpan)
: base(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan) {
}
}
sealed class PropertyMapMetadataTableVM : MetadataTable2VM {
public PropertyMapMetadataTableVM(HexBuffer buffer, TablesStreamVM tablesStream, MDTable mdTable, HexSpan stringsHeapSpan, HexSpan guidHeapSpan)
: base(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan) {
}
}
sealed class PropertyPtrMetadataTableVM : MetadataTable1VM {
public PropertyPtrMetadataTableVM(HexBuffer buffer, TablesStreamVM tablesStream, MDTable mdTable, HexSpan stringsHeapSpan, HexSpan guidHeapSpan)
: base(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan) {
}
}
sealed class PropertyMetadataTableVM : MetadataTable3InfoVM {
public PropertyMetadataTableVM(HexBuffer buffer, TablesStreamVM tablesStream, MDTable mdTable, HexSpan stringsHeapSpan, HexSpan guidHeapSpan)
: base(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan) {
}
}
sealed class MethodSemanticsMetadataTableVM : MetadataTable3VM {
public MethodSemanticsMetadataTableVM(HexBuffer buffer, TablesStreamVM tablesStream, MDTable mdTable, HexSpan stringsHeapSpan, HexSpan guidHeapSpan)
: base(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan) {
}
}
sealed class MethodImplMetadataTableVM : MetadataTable3VM {
public MethodImplMetadataTableVM(HexBuffer buffer, TablesStreamVM tablesStream, MDTable mdTable, HexSpan stringsHeapSpan, HexSpan guidHeapSpan)
: base(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan) {
}
}
sealed class ModuleRefMetadataTableVM : MetadataTable1InfoVM {
public ModuleRefMetadataTableVM(HexBuffer buffer, TablesStreamVM tablesStream, MDTable mdTable, HexSpan stringsHeapSpan, HexSpan guidHeapSpan)
: base(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan) {
}
}
sealed class TypeSpecMetadataTableVM : MetadataTable1VM {
public TypeSpecMetadataTableVM(HexBuffer buffer, TablesStreamVM tablesStream, MDTable mdTable, HexSpan stringsHeapSpan, HexSpan guidHeapSpan)
: base(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan) {
}
}
sealed class ImplMapMetadataTableVM : MetadataTable4InfoVM {
public ImplMapMetadataTableVM(HexBuffer buffer, TablesStreamVM tablesStream, MDTable mdTable, HexSpan stringsHeapSpan, HexSpan guidHeapSpan)
: base(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan) {
}
}
sealed class FieldRVAMetadataTableVM : MetadataTable2VM {
public FieldRVAMetadataTableVM(HexBuffer buffer, TablesStreamVM tablesStream, MDTable mdTable, HexSpan stringsHeapSpan, HexSpan guidHeapSpan)
: base(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan) {
}
}
sealed class ENCLogMetadataTableVM : MetadataTable2VM {
public ENCLogMetadataTableVM(HexBuffer buffer, TablesStreamVM tablesStream, MDTable mdTable, HexSpan stringsHeapSpan, HexSpan guidHeapSpan)
: base(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan) {
}
}
sealed class ENCMapMetadataTableVM : MetadataTable1VM {
public ENCMapMetadataTableVM(HexBuffer buffer, TablesStreamVM tablesStream, MDTable mdTable, HexSpan stringsHeapSpan, HexSpan guidHeapSpan)
: base(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan) {
}
}
sealed class AssemblyMetadataTableVM : MetadataTable9InfoVM {
public AssemblyMetadataTableVM(HexBuffer buffer, TablesStreamVM tablesStream, MDTable mdTable, HexSpan stringsHeapSpan, HexSpan guidHeapSpan)
: base(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan) {
}
}
sealed class AssemblyProcessorMetadataTableVM : MetadataTable1VM {
public AssemblyProcessorMetadataTableVM(HexBuffer buffer, TablesStreamVM tablesStream, MDTable mdTable, HexSpan stringsHeapSpan, HexSpan guidHeapSpan)
: base(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan) {
}
}
sealed class AssemblyOSMetadataTableVM : MetadataTable3VM {
public AssemblyOSMetadataTableVM(HexBuffer buffer, TablesStreamVM tablesStream, MDTable mdTable, HexSpan stringsHeapSpan, HexSpan guidHeapSpan)
: base(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan) {
}
}
sealed class AssemblyRefMetadataTableVM : MetadataTable9InfoVM {
public AssemblyRefMetadataTableVM(HexBuffer buffer, TablesStreamVM tablesStream, MDTable mdTable, HexSpan stringsHeapSpan, HexSpan guidHeapSpan)
: base(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan) {
}
}
sealed class AssemblyRefProcessorMetadataTableVM : MetadataTable2VM {
public AssemblyRefProcessorMetadataTableVM(HexBuffer buffer, TablesStreamVM tablesStream, MDTable mdTable, HexSpan stringsHeapSpan, HexSpan guidHeapSpan)
: base(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan) {
}
}
sealed class AssemblyRefOSMetadataTableVM : MetadataTable4VM {
public AssemblyRefOSMetadataTableVM(HexBuffer buffer, TablesStreamVM tablesStream, MDTable mdTable, HexSpan stringsHeapSpan, HexSpan guidHeapSpan)
: base(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan) {
}
}
sealed class FileMetadataTableVM : MetadataTable3InfoVM {
public FileMetadataTableVM(HexBuffer buffer, TablesStreamVM tablesStream, MDTable mdTable, HexSpan stringsHeapSpan, HexSpan guidHeapSpan)
: base(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan) {
}
}
sealed class ExportedTypeMetadataTableVM : MetadataTable5InfoVM {
public ExportedTypeMetadataTableVM(HexBuffer buffer, TablesStreamVM tablesStream, MDTable mdTable, HexSpan stringsHeapSpan, HexSpan guidHeapSpan)
: base(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan) {
}
}
sealed class ManifestResourceMetadataTableVM : MetadataTable4InfoVM {
public ManifestResourceMetadataTableVM(HexBuffer buffer, TablesStreamVM tablesStream, MDTable mdTable, HexSpan stringsHeapSpan, HexSpan guidHeapSpan)
: base(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan) {
}
}
sealed class NestedClassMetadataTableVM : MetadataTable2VM {
public NestedClassMetadataTableVM(HexBuffer buffer, TablesStreamVM tablesStream, MDTable mdTable, HexSpan stringsHeapSpan, HexSpan guidHeapSpan)
: base(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan) {
}
}
sealed class GenericParamMetadataTableV11VM : MetadataTable5InfoVM {
public GenericParamMetadataTableV11VM(HexBuffer buffer, TablesStreamVM tablesStream, MDTable mdTable, HexSpan stringsHeapSpan, HexSpan guidHeapSpan)
: base(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan) {
}
}
sealed class GenericParamMetadataTableVM : MetadataTable4InfoVM {
public GenericParamMetadataTableVM(HexBuffer buffer, TablesStreamVM tablesStream, MDTable mdTable, HexSpan stringsHeapSpan, HexSpan guidHeapSpan)
: base(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan) {
}
}
sealed class MethodSpecMetadataTableVM : MetadataTable2VM {
public MethodSpecMetadataTableVM(HexBuffer buffer, TablesStreamVM tablesStream, MDTable mdTable, HexSpan stringsHeapSpan, HexSpan guidHeapSpan)
: base(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan) {
}
}
sealed class GenericParamConstraintMetadataTableVM : MetadataTable2VM {
public GenericParamConstraintMetadataTableVM(HexBuffer buffer, TablesStreamVM tablesStream, MDTable mdTable, HexSpan stringsHeapSpan, HexSpan guidHeapSpan)
: base(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan) {
}
}
sealed class DocumentMetadataTableVM : MetadataTable4VM {
public DocumentMetadataTableVM(HexBuffer buffer, TablesStreamVM tablesStream, MDTable mdTable, HexSpan stringsHeapSpan, HexSpan guidHeapSpan)
: base(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan) {
}
}
sealed class MethodDebugInformationMetadataTableVM : MetadataTable2VM {
public MethodDebugInformationMetadataTableVM(HexBuffer buffer, TablesStreamVM tablesStream, MDTable mdTable, HexSpan stringsHeapSpan, HexSpan guidHeapSpan)
: base(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan) {
}
}
sealed class LocalScopeMetadataTableVM : MetadataTable6VM {
public LocalScopeMetadataTableVM(HexBuffer buffer, TablesStreamVM tablesStream, MDTable mdTable, HexSpan stringsHeapSpan, HexSpan guidHeapSpan)
: base(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan) {
}
}
sealed class LocalVariableMetadataTableVM : MetadataTable3VM {
public LocalVariableMetadataTableVM(HexBuffer buffer, TablesStreamVM tablesStream, MDTable mdTable, HexSpan stringsHeapSpan, HexSpan guidHeapSpan)
: base(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan) {
}
}
sealed class LocalConstantMetadataTableVM : MetadataTable2VM {
public LocalConstantMetadataTableVM(HexBuffer buffer, TablesStreamVM tablesStream, MDTable mdTable, HexSpan stringsHeapSpan, HexSpan guidHeapSpan)
: base(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan) {
}
}
sealed class ImportScopeMetadataTableVM : MetadataTable2VM {
public ImportScopeMetadataTableVM(HexBuffer buffer, TablesStreamVM tablesStream, MDTable mdTable, HexSpan stringsHeapSpan, HexSpan guidHeapSpan)
: base(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan) {
}
}
sealed class StateMachineMethodMetadataTableVM : MetadataTable2VM {
public StateMachineMethodMetadataTableVM(HexBuffer buffer, TablesStreamVM tablesStream, MDTable mdTable, HexSpan stringsHeapSpan, HexSpan guidHeapSpan)
: base(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan) {
}
}
sealed class CustomDebugInformationMetadataTableVM : MetadataTable3VM {
public CustomDebugInformationMetadataTableVM(HexBuffer buffer, TablesStreamVM tablesStream, MDTable mdTable, HexSpan stringsHeapSpan, HexSpan guidHeapSpan)
: base(buffer, tablesStream, mdTable, stringsHeapSpan, guidHeapSpan) {
}
}
}