obfuz/Plugins/dnlib/DotNet/Writer/MDTableWriter.cs

996 lines
34 KiB
C#

// dnlib: See LICENSE.txt for more info
using dnlib.DotNet.MD;
using dnlib.Protection;
using dnlib.Utils;
namespace dnlib.DotNet.Writer {
/// <summary>
/// Writes <see cref="MDTable{T}"/>s
/// </summary>
public static class MDTableWriter {
/// <summary>
/// Writes a <c>Module</c> table
/// </summary>
/// <param name="writer">Writer</param>
/// <param name="metadata">Metadata</param>
/// <param name="table">Table</param>
public static void Write(this DataWriter writer, Metadata metadata, MDTable<RawModuleRow> table) {
var columns = table.TableInfo.Columns;
var columns1 = columns[1];
var columns2 = columns[2];
var columns3 = columns[3];
var columns4 = columns[4];
var stringsHeap = metadata.StringsHeap;
for (int i = 0; i < table.Rows; i++) {
var row = table[(uint)i + 1];
writer.WriteUInt16(row.Generation);
columns1.Write24(writer, stringsHeap.GetOffset(row.Name));
columns2.Write24(writer, row.Mvid);
columns3.Write24(writer, row.EncId);
columns4.Write24(writer, row.EncBaseId);
}
}
/// <summary>
/// Writes a <c>TypeRef</c> table
/// </summary>
/// <param name="writer">Writer</param>
/// <param name="metadata">Metadata</param>
/// <param name="table">Table</param>
public static void Write(this DataWriter writer, Metadata metadata, MDTable<RawTypeRefRow> table) {
var columns = table.TableInfo.Columns;
var columns0 = columns[0];
var columns1 = columns[1];
var columns2 = columns[2];
var stringsHeap = metadata.StringsHeap;
for (int i = 0; i < table.Rows; i++) {
var row = table[(uint)i + 1];
columns0.Write24(writer, row.ResolutionScope);
columns1.Write24(writer, stringsHeap.GetOffset(row.Name));
columns2.Write24(writer, stringsHeap.GetOffset(row.Namespace));
}
}
/// <summary>
/// Writes a <c>TypeDef</c> table
/// </summary>
/// <param name="writer">Writer</param>
/// <param name="metadata">Metadata</param>
/// <param name="table">Table</param>
public static void Write(this DataWriter writer, Metadata metadata, MDTable<RawTypeDefRow> table) {
var columns = table.TableInfo.Columns;
var columns1 = columns[1];
var columns2 = columns[2];
var columns3 = columns[3];
var columns4 = columns[4];
var columns5 = columns[5];
var stringsHeap = metadata.StringsHeap;
for (int i = 0; i < table.Rows; i++) {
var row = table[(uint)i + 1];
EncryptionUtil.WriteWithNotSegmentEncIfNeed(writer, w => {
w.WriteUInt32(row.Flags);
columns1.Write24(w, stringsHeap.GetOffset(row.Name));
columns2.Write24(w, stringsHeap.GetOffset(row.Namespace));
columns3.Write24(w, row.Extends);
columns4.Write24(w, row.FieldList);
columns5.Write24(w, row.MethodList);
}, enc => enc.LazyTableEnc);
//writer.WriteUInt32(row.Flags);
//columns1.Write24(writer, stringsHeap.GetOffset(row.Name));
//columns2.Write24(writer, stringsHeap.GetOffset(row.Namespace));
//columns3.Write24(writer, row.Extends);
//columns4.Write24(writer, row.FieldList);
//columns5.Write24(writer, row.MethodList);
}
}
/// <summary>
/// Writes a <c>FieldPtr</c> table
/// </summary>
/// <param name="writer">Writer</param>
/// <param name="metadata">Metadata</param>
/// <param name="table">Table</param>
public static void Write(this DataWriter writer, Metadata metadata, MDTable<RawFieldPtrRow> table) {
var columns = table.TableInfo.Columns;
var columns0 = columns[0];
for (int i = 0; i < table.Rows; i++) {
var row = table[(uint)i + 1];
columns0.Write24(writer, row.Field);
}
}
/// <summary>
/// Writes a <c>Field</c> table
/// </summary>
/// <param name="writer">Writer</param>
/// <param name="metadata">Metadata</param>
/// <param name="table">Table</param>
public static void Write(this DataWriter writer, Metadata metadata, MDTable<RawFieldRow> table) {
var columns = table.TableInfo.Columns;
var columns1 = columns[1];
var columns2 = columns[2];
var stringsHeap = metadata.StringsHeap;
for (int i = 0; i < table.Rows; i++) {
var row = table[(uint)i + 1];
writer.WriteUInt16(row.Flags);
columns1.Write24(writer, stringsHeap.GetOffset(row.Name));
columns2.Write24(writer, row.Signature);
}
}
/// <summary>
/// Writes a <c>MethodPtr</c> table
/// </summary>
/// <param name="writer">Writer</param>
/// <param name="metadata">Metadata</param>
/// <param name="table">Table</param>
public static void Write(this DataWriter writer, Metadata metadata, MDTable<RawMethodPtrRow> table) {
var columns = table.TableInfo.Columns;
var columns0 = columns[0];
for (int i = 0; i < table.Rows; i++) {
var row = table[(uint)i + 1];
columns0.Write24(writer, row.Method);
}
}
/// <summary>
/// Writes a <c>Method</c> table
/// </summary>
/// <param name="writer">Writer</param>
/// <param name="metadata">Metadata</param>
/// <param name="table">Table</param>
public static void Write(this DataWriter writer, Metadata metadata, MDTable<RawMethodRow> table) {
var columns = table.TableInfo.Columns;
var columns3 = columns[3];
var columns4 = columns[4];
var columns5 = columns[5];
var stringsHeap = metadata.StringsHeap;
for (int i = 0; i < table.Rows; i++) {
var row = table[(uint)i + 1];
writer.WriteUInt32(row.RVA);
writer.WriteUInt16(row.ImplFlags);
writer.WriteUInt16(row.Flags);
columns3.Write24(writer, stringsHeap.GetOffset(row.Name));
columns4.Write24(writer, row.Signature);
columns5.Write24(writer, row.ParamList);
}
}
/// <summary>
/// Writes a <c>ParamPtr</c> table
/// </summary>
/// <param name="writer">Writer</param>
/// <param name="metadata">Metadata</param>
/// <param name="table">Table</param>
public static void Write(this DataWriter writer, Metadata metadata, MDTable<RawParamPtrRow> table) {
var columns = table.TableInfo.Columns;
var columns0 = columns[0];
for (int i = 0; i < table.Rows; i++) {
var row = table[(uint)i + 1];
columns0.Write24(writer, row.Param);
}
}
/// <summary>
/// Writes a <c>Param</c> table
/// </summary>
/// <param name="writer">Writer</param>
/// <param name="metadata">Metadata</param>
/// <param name="table">Table</param>
public static void Write(this DataWriter writer, Metadata metadata, MDTable<RawParamRow> table) {
var columns = table.TableInfo.Columns;
var columns2 = columns[2];
var stringsHeap = metadata.StringsHeap;
for (int i = 0; i < table.Rows; i++) {
var row = table[(uint)i + 1];
writer.WriteUInt16(row.Flags);
writer.WriteUInt16(row.Sequence);
columns2.Write24(writer, stringsHeap.GetOffset(row.Name));
}
}
/// <summary>
/// Writes a <c>InterfaceImpl</c> table
/// </summary>
/// <param name="writer">Writer</param>
/// <param name="metadata">Metadata</param>
/// <param name="table">Table</param>
public static void Write(this DataWriter writer, Metadata metadata, MDTable<RawInterfaceImplRow> table) {
var columns = table.TableInfo.Columns;
var columns0 = columns[0];
var columns1 = columns[1];
for (int i = 0; i < table.Rows; i++) {
var row = table[(uint)i + 1];
columns0.Write24(writer, row.Class);
columns1.Write24(writer, row.Interface);
}
}
/// <summary>
/// Writes a <c>MemberRef</c> table
/// </summary>
/// <param name="writer">Writer</param>
/// <param name="metadata">Metadata</param>
/// <param name="table">Table</param>
public static void Write(this DataWriter writer, Metadata metadata, MDTable<RawMemberRefRow> table) {
var columns = table.TableInfo.Columns;
var columns0 = columns[0];
var columns1 = columns[1];
var columns2 = columns[2];
var stringsHeap = metadata.StringsHeap;
for (int i = 0; i < table.Rows; i++) {
var row = table[(uint)i + 1];
columns0.Write24(writer, row.Class);
columns1.Write24(writer, stringsHeap.GetOffset(row.Name));
columns2.Write24(writer, row.Signature);
}
}
/// <summary>
/// Writes a <c>Constant</c> table
/// </summary>
/// <param name="writer">Writer</param>
/// <param name="metadata">Metadata</param>
/// <param name="table">Table</param>
public static void Write(this DataWriter writer, Metadata metadata, MDTable<RawConstantRow> table) {
var columns = table.TableInfo.Columns;
var columns2 = columns[2];
var columns3 = columns[3];
for (int i = 0; i < table.Rows; i++) {
var row = table[(uint)i + 1];
writer.WriteByte(row.Type);
writer.WriteByte(row.Padding);
columns2.Write24(writer, row.Parent);
columns3.Write24(writer, row.Value);
}
}
/// <summary>
/// Writes a <c>CustomAttribute</c> table
/// </summary>
/// <param name="writer">Writer</param>
/// <param name="metadata">Metadata</param>
/// <param name="table">Table</param>
public static void Write(this DataWriter writer, Metadata metadata, MDTable<RawCustomAttributeRow> table) {
var columns = table.TableInfo.Columns;
var columns0 = columns[0];
var columns1 = columns[1];
var columns2 = columns[2];
for (int i = 0; i < table.Rows; i++) {
var row = table[(uint)i + 1];
columns0.Write24(writer, row.Parent);
columns1.Write24(writer, row.Type);
columns2.Write24(writer, row.Value);
}
}
/// <summary>
/// Writes a <c>FieldMarshal</c> table
/// </summary>
/// <param name="writer">Writer</param>
/// <param name="metadata">Metadata</param>
/// <param name="table">Table</param>
public static void Write(this DataWriter writer, Metadata metadata, MDTable<RawFieldMarshalRow> table) {
var columns = table.TableInfo.Columns;
var columns0 = columns[0];
var columns1 = columns[1];
for (int i = 0; i < table.Rows; i++) {
var row = table[(uint)i + 1];
columns0.Write24(writer, row.Parent);
columns1.Write24(writer, row.NativeType);
}
}
/// <summary>
/// Writes a <c>DeclSecurity</c> table
/// </summary>
/// <param name="writer">Writer</param>
/// <param name="metadata">Metadata</param>
/// <param name="table">Table</param>
public static void Write(this DataWriter writer, Metadata metadata, MDTable<RawDeclSecurityRow> table) {
var columns = table.TableInfo.Columns;
var columns1 = columns[1];
var columns2 = columns[2];
for (int i = 0; i < table.Rows; i++) {
var row = table[(uint)i + 1];
writer.WriteInt16(row.Action);
columns1.Write24(writer, row.Parent);
columns2.Write24(writer, row.PermissionSet);
}
}
/// <summary>
/// Writes a <c>ClassLayout</c> table
/// </summary>
/// <param name="writer">Writer</param>
/// <param name="metadata">Metadata</param>
/// <param name="table">Table</param>
public static void Write(this DataWriter writer, Metadata metadata, MDTable<RawClassLayoutRow> table) {
var columns = table.TableInfo.Columns;
var columns2 = columns[2];
for (int i = 0; i < table.Rows; i++) {
var row = table[(uint)i + 1];
writer.WriteUInt16(row.PackingSize);
writer.WriteUInt32(row.ClassSize);
columns2.Write24(writer, row.Parent);
}
}
/// <summary>
/// Writes a <c>FieldLayout</c> table
/// </summary>
/// <param name="writer">Writer</param>
/// <param name="metadata">Metadata</param>
/// <param name="table">Table</param>
public static void Write(this DataWriter writer, Metadata metadata, MDTable<RawFieldLayoutRow> table) {
var columns = table.TableInfo.Columns;
var columns1 = columns[1];
for (int i = 0; i < table.Rows; i++) {
var row = table[(uint)i + 1];
writer.WriteUInt32(row.OffSet);
columns1.Write24(writer, row.Field);
}
}
/// <summary>
/// Writes a <c>StandAloneSig</c> table
/// </summary>
/// <param name="writer">Writer</param>
/// <param name="metadata">Metadata</param>
/// <param name="table">Table</param>
public static void Write(this DataWriter writer, Metadata metadata, MDTable<RawStandAloneSigRow> table) {
var columns = table.TableInfo.Columns;
var columns0 = columns[0];
for (int i = 0; i < table.Rows; i++) {
var row = table[(uint)i + 1];
columns0.Write24(writer, row.Signature);
}
}
/// <summary>
/// Writes a <c>EventMap</c> table
/// </summary>
/// <param name="writer">Writer</param>
/// <param name="metadata">Metadata</param>
/// <param name="table">Table</param>
public static void Write(this DataWriter writer, Metadata metadata, MDTable<RawEventMapRow> table) {
var columns = table.TableInfo.Columns;
var columns0 = columns[0];
var columns1 = columns[1];
for (int i = 0; i < table.Rows; i++) {
var row = table[(uint)i + 1];
columns0.Write24(writer, row.Parent);
columns1.Write24(writer, row.EventList);
}
}
/// <summary>
/// Writes a <c>EventPtr</c> table
/// </summary>
/// <param name="writer">Writer</param>
/// <param name="metadata">Metadata</param>
/// <param name="table">Table</param>
public static void Write(this DataWriter writer, Metadata metadata, MDTable<RawEventPtrRow> table) {
var columns = table.TableInfo.Columns;
var columns0 = columns[0];
for (int i = 0; i < table.Rows; i++) {
var row = table[(uint)i + 1];
columns0.Write24(writer, row.Event);
}
}
/// <summary>
/// Writes a <c>Event</c> table
/// </summary>
/// <param name="writer">Writer</param>
/// <param name="metadata">Metadata</param>
/// <param name="table">Table</param>
public static void Write(this DataWriter writer, Metadata metadata, MDTable<RawEventRow> table) {
var columns = table.TableInfo.Columns;
var columns1 = columns[1];
var columns2 = columns[2];
var stringsHeap = metadata.StringsHeap;
for (int i = 0; i < table.Rows; i++) {
var row = table[(uint)i + 1];
writer.WriteUInt16(row.EventFlags);
columns1.Write24(writer, stringsHeap.GetOffset(row.Name));
columns2.Write24(writer, row.EventType);
}
}
/// <summary>
/// Writes a <c>PropertyMap</c> table
/// </summary>
/// <param name="writer">Writer</param>
/// <param name="metadata">Metadata</param>
/// <param name="table">Table</param>
public static void Write(this DataWriter writer, Metadata metadata, MDTable<RawPropertyMapRow> table) {
var columns = table.TableInfo.Columns;
var columns0 = columns[0];
var columns1 = columns[1];
for (int i = 0; i < table.Rows; i++) {
var row = table[(uint)i + 1];
columns0.Write24(writer, row.Parent);
columns1.Write24(writer, row.PropertyList);
}
}
/// <summary>
/// Writes a <c>PropertyPtr</c> table
/// </summary>
/// <param name="writer">Writer</param>
/// <param name="metadata">Metadata</param>
/// <param name="table">Table</param>
public static void Write(this DataWriter writer, Metadata metadata, MDTable<RawPropertyPtrRow> table) {
var columns = table.TableInfo.Columns;
var columns0 = columns[0];
for (int i = 0; i < table.Rows; i++) {
var row = table[(uint)i + 1];
columns0.Write24(writer, row.Property);
}
}
/// <summary>
/// Writes a <c>Property</c> table
/// </summary>
/// <param name="writer">Writer</param>
/// <param name="metadata">Metadata</param>
/// <param name="table">Table</param>
public static void Write(this DataWriter writer, Metadata metadata, MDTable<RawPropertyRow> table) {
var columns = table.TableInfo.Columns;
var columns1 = columns[1];
var columns2 = columns[2];
var stringsHeap = metadata.StringsHeap;
for (int i = 0; i < table.Rows; i++) {
var row = table[(uint)i + 1];
writer.WriteUInt16(row.PropFlags);
columns1.Write24(writer, stringsHeap.GetOffset(row.Name));
columns2.Write24(writer, row.Type);
}
}
/// <summary>
/// Writes a <c>MethodSemantics</c> table
/// </summary>
/// <param name="writer">Writer</param>
/// <param name="metadata">Metadata</param>
/// <param name="table">Table</param>
public static void Write(this DataWriter writer, Metadata metadata, MDTable<RawMethodSemanticsRow> table) {
var columns = table.TableInfo.Columns;
var columns1 = columns[1];
var columns2 = columns[2];
for (int i = 0; i < table.Rows; i++) {
var row = table[(uint)i + 1];
writer.WriteUInt16(row.Semantic);
columns1.Write24(writer, row.Method);
columns2.Write24(writer, row.Association);
}
}
/// <summary>
/// Writes a <c>MethodImpl</c> table
/// </summary>
/// <param name="writer">Writer</param>
/// <param name="metadata">Metadata</param>
/// <param name="table">Table</param>
public static void Write(this DataWriter writer, Metadata metadata, MDTable<RawMethodImplRow> table) {
var columns = table.TableInfo.Columns;
var columns0 = columns[0];
var columns1 = columns[1];
var columns2 = columns[2];
for (int i = 0; i < table.Rows; i++) {
var row = table[(uint)i + 1];
columns0.Write24(writer, row.Class);
columns1.Write24(writer, row.MethodBody);
columns2.Write24(writer, row.MethodDeclaration);
}
}
/// <summary>
/// Writes a <c>ModuleRef</c> table
/// </summary>
/// <param name="writer">Writer</param>
/// <param name="metadata">Metadata</param>
/// <param name="table">Table</param>
public static void Write(this DataWriter writer, Metadata metadata, MDTable<RawModuleRefRow> table) {
var columns = table.TableInfo.Columns;
var columns0 = columns[0];
var stringsHeap = metadata.StringsHeap;
for (int i = 0; i < table.Rows; i++) {
var row = table[(uint)i + 1];
columns0.Write24(writer, stringsHeap.GetOffset(row.Name));
}
}
/// <summary>
/// Writes a <c>TypeSpec</c> table
/// </summary>
/// <param name="writer">Writer</param>
/// <param name="metadata">Metadata</param>
/// <param name="table">Table</param>
public static void Write(this DataWriter writer, Metadata metadata, MDTable<RawTypeSpecRow> table) {
var columns = table.TableInfo.Columns;
var columns0 = columns[0];
for (int i = 0; i < table.Rows; i++) {
var row = table[(uint)i + 1];
columns0.Write24(writer, row.Signature);
}
}
/// <summary>
/// Writes a <c>ImplMap</c> table
/// </summary>
/// <param name="writer">Writer</param>
/// <param name="metadata">Metadata</param>
/// <param name="table">Table</param>
public static void Write(this DataWriter writer, Metadata metadata, MDTable<RawImplMapRow> table) {
var columns = table.TableInfo.Columns;
var columns1 = columns[1];
var columns2 = columns[2];
var columns3 = columns[3];
var stringsHeap = metadata.StringsHeap;
for (int i = 0; i < table.Rows; i++) {
var row = table[(uint)i + 1];
writer.WriteUInt16(row.MappingFlags);
columns1.Write24(writer, row.MemberForwarded);
columns2.Write24(writer, stringsHeap.GetOffset(row.ImportName));
columns3.Write24(writer, row.ImportScope);
}
}
/// <summary>
/// Writes a <c>FieldRVA</c> table
/// </summary>
/// <param name="writer">Writer</param>
/// <param name="metadata">Metadata</param>
/// <param name="table">Table</param>
public static void Write(this DataWriter writer, Metadata metadata, MDTable<RawFieldRVARow> table) {
var columns = table.TableInfo.Columns;
var columns1 = columns[1];
for (int i = 0; i < table.Rows; i++) {
var row = table[(uint)i + 1];
writer.WriteUInt32(row.RVA);
columns1.Write24(writer, row.Field);
}
}
/// <summary>
/// Writes a <c>ENCLog</c> table
/// </summary>
/// <param name="writer">Writer</param>
/// <param name="metadata">Metadata</param>
/// <param name="table">Table</param>
public static void Write(this DataWriter writer, Metadata metadata, MDTable<RawENCLogRow> table) {
for (int i = 0; i < table.Rows; i++) {
var row = table[(uint)i + 1];
writer.WriteUInt32(row.Token);
writer.WriteUInt32(row.FuncCode);
}
}
/// <summary>
/// Writes a <c>ENCMap</c> table
/// </summary>
/// <param name="writer">Writer</param>
/// <param name="metadata">Metadata</param>
/// <param name="table">Table</param>
public static void Write(this DataWriter writer, Metadata metadata, MDTable<RawENCMapRow> table) {
for (int i = 0; i < table.Rows; i++) {
var row = table[(uint)i + 1];
writer.WriteUInt32(row.Token);
}
}
/// <summary>
/// Writes a <c>Assembly</c> table
/// </summary>
/// <param name="writer">Writer</param>
/// <param name="metadata">Metadata</param>
/// <param name="table">Table</param>
public static void Write(this DataWriter writer, Metadata metadata, MDTable<RawAssemblyRow> table) {
var columns = table.TableInfo.Columns;
var columns6 = columns[6];
var columns7 = columns[7];
var columns8 = columns[8];
var stringsHeap = metadata.StringsHeap;
for (int i = 0; i < table.Rows; i++) {
var row = table[(uint)i + 1];
writer.WriteUInt32(row.HashAlgId);
writer.WriteUInt16(row.MajorVersion);
writer.WriteUInt16(row.MinorVersion);
writer.WriteUInt16(row.BuildNumber);
writer.WriteUInt16(row.RevisionNumber);
writer.WriteUInt32(row.Flags);
columns6.Write24(writer, row.PublicKey);
columns7.Write24(writer, stringsHeap.GetOffset(row.Name));
columns8.Write24(writer, stringsHeap.GetOffset(row.Locale));
}
}
/// <summary>
/// Writes a <c>AssemblyProcessor</c> table
/// </summary>
/// <param name="writer">Writer</param>
/// <param name="metadata">Metadata</param>
/// <param name="table">Table</param>
public static void Write(this DataWriter writer, Metadata metadata, MDTable<RawAssemblyProcessorRow> table) {
for (int i = 0; i < table.Rows; i++) {
var row = table[(uint)i + 1];
writer.WriteUInt32(row.Processor);
}
}
/// <summary>
/// Writes a <c>AssemblyOS</c> table
/// </summary>
/// <param name="writer">Writer</param>
/// <param name="metadata">Metadata</param>
/// <param name="table">Table</param>
public static void Write(this DataWriter writer, Metadata metadata, MDTable<RawAssemblyOSRow> table) {
for (int i = 0; i < table.Rows; i++) {
var row = table[(uint)i + 1];
writer.WriteUInt32(row.OSPlatformId);
writer.WriteUInt32(row.OSMajorVersion);
writer.WriteUInt32(row.OSMinorVersion);
}
}
/// <summary>
/// Writes a <c>AssemblyRef</c> table
/// </summary>
/// <param name="writer">Writer</param>
/// <param name="metadata">Metadata</param>
/// <param name="table">Table</param>
public static void Write(this DataWriter writer, Metadata metadata, MDTable<RawAssemblyRefRow> table) {
var columns = table.TableInfo.Columns;
var columns5 = columns[5];
var columns6 = columns[6];
var columns7 = columns[7];
var columns8 = columns[8];
var stringsHeap = metadata.StringsHeap;
for (int i = 0; i < table.Rows; i++) {
var row = table[(uint)i + 1];
writer.WriteUInt16(row.MajorVersion);
writer.WriteUInt16(row.MinorVersion);
writer.WriteUInt16(row.BuildNumber);
writer.WriteUInt16(row.RevisionNumber);
writer.WriteUInt32(row.Flags);
columns5.Write24(writer, row.PublicKeyOrToken);
columns6.Write24(writer, stringsHeap.GetOffset(row.Name));
columns7.Write24(writer, stringsHeap.GetOffset(row.Locale));
columns8.Write24(writer, row.HashValue);
}
}
/// <summary>
/// Writes a <c>AssemblyRefProcessor</c> table
/// </summary>
/// <param name="writer">Writer</param>
/// <param name="metadata">Metadata</param>
/// <param name="table">Table</param>
public static void Write(this DataWriter writer, Metadata metadata, MDTable<RawAssemblyRefProcessorRow> table) {
var columns = table.TableInfo.Columns;
var columns1 = columns[1];
for (int i = 0; i < table.Rows; i++) {
var row = table[(uint)i + 1];
writer.WriteUInt32(row.Processor);
columns1.Write24(writer, row.AssemblyRef);
}
}
/// <summary>
/// Writes a <c>AssemblyRefOS</c> table
/// </summary>
/// <param name="writer">Writer</param>
/// <param name="metadata">Metadata</param>
/// <param name="table">Table</param>
public static void Write(this DataWriter writer, Metadata metadata, MDTable<RawAssemblyRefOSRow> table) {
var columns = table.TableInfo.Columns;
var columns3 = columns[3];
for (int i = 0; i < table.Rows; i++) {
var row = table[(uint)i + 1];
writer.WriteUInt32(row.OSPlatformId);
writer.WriteUInt32(row.OSMajorVersion);
writer.WriteUInt32(row.OSMinorVersion);
columns3.Write24(writer, row.AssemblyRef);
}
}
/// <summary>
/// Writes a <c>File</c> table
/// </summary>
/// <param name="writer">Writer</param>
/// <param name="metadata">Metadata</param>
/// <param name="table">Table</param>
public static void Write(this DataWriter writer, Metadata metadata, MDTable<RawFileRow> table) {
var columns = table.TableInfo.Columns;
var columns1 = columns[1];
var columns2 = columns[2];
var stringsHeap = metadata.StringsHeap;
for (int i = 0; i < table.Rows; i++) {
var row = table[(uint)i + 1];
writer.WriteUInt32(row.Flags);
columns1.Write24(writer, stringsHeap.GetOffset(row.Name));
columns2.Write24(writer, row.HashValue);
}
}
/// <summary>
/// Writes a <c>ExportedType</c> table
/// </summary>
/// <param name="writer">Writer</param>
/// <param name="metadata">Metadata</param>
/// <param name="table">Table</param>
public static void Write(this DataWriter writer, Metadata metadata, MDTable<RawExportedTypeRow> table) {
var columns = table.TableInfo.Columns;
var columns2 = columns[2];
var columns3 = columns[3];
var columns4 = columns[4];
var stringsHeap = metadata.StringsHeap;
for (int i = 0; i < table.Rows; i++) {
var row = table[(uint)i + 1];
writer.WriteUInt32(row.Flags);
writer.WriteUInt32(row.TypeDefId);
columns2.Write24(writer, stringsHeap.GetOffset(row.TypeName));
columns3.Write24(writer, stringsHeap.GetOffset(row.TypeNamespace));
columns4.Write24(writer, row.Implementation);
}
}
/// <summary>
/// Writes a <c>ManifestResource</c> table
/// </summary>
/// <param name="writer">Writer</param>
/// <param name="metadata">Metadata</param>
/// <param name="table">Table</param>
public static void Write(this DataWriter writer, Metadata metadata, MDTable<RawManifestResourceRow> table) {
var columns = table.TableInfo.Columns;
var columns2 = columns[2];
var columns3 = columns[3];
var stringsHeap = metadata.StringsHeap;
for (int i = 0; i < table.Rows; i++) {
var row = table[(uint)i + 1];
writer.WriteUInt32(row.Offset);
writer.WriteUInt32(row.Flags);
columns2.Write24(writer, stringsHeap.GetOffset(row.Name));
columns3.Write24(writer, row.Implementation);
}
}
/// <summary>
/// Writes a <c>NestedClass</c> table
/// </summary>
/// <param name="writer">Writer</param>
/// <param name="metadata">Metadata</param>
/// <param name="table">Table</param>
public static void Write(this DataWriter writer, Metadata metadata, MDTable<RawNestedClassRow> table) {
var columns = table.TableInfo.Columns;
var columns0 = columns[0];
var columns1 = columns[1];
for (int i = 0; i < table.Rows; i++) {
var row = table[(uint)i + 1];
columns0.Write24(writer, row.NestedClass);
columns1.Write24(writer, row.EnclosingClass);
}
}
/// <summary>
/// Writes a <c>GenericParam</c> table
/// </summary>
/// <param name="writer">Writer</param>
/// <param name="metadata">Metadata</param>
/// <param name="table">Table</param>
public static void Write(this DataWriter writer, Metadata metadata, MDTable<RawGenericParamRow> table) {
var columns = table.TableInfo.Columns;
var columns2 = columns[2];
var columns3 = columns[3];
var stringsHeap = metadata.StringsHeap;
if (columns.Length >= 5) {
var columns4 = columns[4];
for (int i = 0; i < table.Rows; i++) {
var row = table[(uint)i + 1];
writer.WriteUInt16(row.Number);
writer.WriteUInt16(row.Flags);
columns2.Write24(writer, row.Owner);
columns3.Write24(writer, stringsHeap.GetOffset(row.Name));
columns4.Write24(writer, row.Kind);
}
}
else {
for (int i = 0; i < table.Rows; i++) {
var row = table[(uint)i + 1];
writer.WriteUInt16(row.Number);
writer.WriteUInt16(row.Flags);
columns2.Write24(writer, row.Owner);
columns3.Write24(writer, stringsHeap.GetOffset(row.Name));
}
}
}
/// <summary>
/// Writes a <c>MethodSpec</c> table
/// </summary>
/// <param name="writer">Writer</param>
/// <param name="metadata">Metadata</param>
/// <param name="table">Table</param>
public static void Write(this DataWriter writer, Metadata metadata, MDTable<RawMethodSpecRow> table) {
var columns = table.TableInfo.Columns;
var columns0 = columns[0];
var columns1 = columns[1];
for (int i = 0; i < table.Rows; i++) {
var row = table[(uint)i + 1];
columns0.Write24(writer, row.Method);
columns1.Write24(writer, row.Instantiation);
}
}
/// <summary>
/// Writes a <c>GenericParamConstraint</c> table
/// </summary>
/// <param name="writer">Writer</param>
/// <param name="metadata">Metadata</param>
/// <param name="table">Table</param>
public static void Write(this DataWriter writer, Metadata metadata, MDTable<RawGenericParamConstraintRow> table) {
var columns = table.TableInfo.Columns;
var columns0 = columns[0];
var columns1 = columns[1];
for (int i = 0; i < table.Rows; i++) {
var row = table[(uint)i + 1];
columns0.Write24(writer, row.Owner);
columns1.Write24(writer, row.Constraint);
}
}
/// <summary>
/// Writes a <c>Document</c> table
/// </summary>
/// <param name="writer">Writer</param>
/// <param name="metadata">Metadata</param>
/// <param name="table">Table</param>
public static void Write(this DataWriter writer, Metadata metadata, MDTable<RawDocumentRow> table) {
var columns = table.TableInfo.Columns;
var columns0 = columns[0];
var columns1 = columns[1];
var columns2 = columns[2];
var columns3 = columns[3];
for (int i = 0; i < table.Rows; i++) {
var row = table[(uint)i + 1];
columns0.Write24(writer, row.Name);
columns1.Write24(writer, row.HashAlgorithm);
columns2.Write24(writer, row.Hash);
columns3.Write24(writer, row.Language);
}
}
/// <summary>
/// Writes a <c>MethodDebugInformation</c> table
/// </summary>
/// <param name="writer">Writer</param>
/// <param name="metadata">Metadata</param>
/// <param name="table">Table</param>
public static void Write(this DataWriter writer, Metadata metadata, MDTable<RawMethodDebugInformationRow> table) {
var columns = table.TableInfo.Columns;
var columns0 = columns[0];
var columns1 = columns[1];
for (int i = 0; i < table.Rows; i++) {
var row = table[(uint)i + 1];
columns0.Write24(writer, row.Document);
columns1.Write24(writer, row.SequencePoints);
}
}
/// <summary>
/// Writes a <c>LocalScope</c> table
/// </summary>
/// <param name="writer">Writer</param>
/// <param name="metadata">Metadata</param>
/// <param name="table">Table</param>
public static void Write(this DataWriter writer, Metadata metadata, MDTable<RawLocalScopeRow> table) {
var columns = table.TableInfo.Columns;
var columns0 = columns[0];
var columns1 = columns[1];
var columns2 = columns[2];
var columns3 = columns[3];
for (int i = 0; i < table.Rows; i++) {
var row = table[(uint)i + 1];
columns0.Write24(writer, row.Method);
columns1.Write24(writer, row.ImportScope);
columns2.Write24(writer, row.VariableList);
columns3.Write24(writer, row.ConstantList);
writer.WriteUInt32(row.StartOffset);
writer.WriteUInt32(row.Length);
}
}
/// <summary>
/// Writes a <c>LocalVariable</c> table
/// </summary>
/// <param name="writer">Writer</param>
/// <param name="metadata">Metadata</param>
/// <param name="table">Table</param>
public static void Write(this DataWriter writer, Metadata metadata, MDTable<RawLocalVariableRow> table) {
var columns = table.TableInfo.Columns;
var columns2 = columns[2];
var stringsHeap = metadata.StringsHeap;
for (int i = 0; i < table.Rows; i++) {
var row = table[(uint)i + 1];
writer.WriteUInt16(row.Attributes);
writer.WriteUInt16(row.Index);
columns2.Write24(writer, stringsHeap.GetOffset(row.Name));
}
}
/// <summary>
/// Writes a <c>LocalConstant</c> table
/// </summary>
/// <param name="writer">Writer</param>
/// <param name="metadata">Metadata</param>
/// <param name="table">Table</param>
public static void Write(this DataWriter writer, Metadata metadata, MDTable<RawLocalConstantRow> table) {
var columns = table.TableInfo.Columns;
var columns0 = columns[0];
var columns1 = columns[1];
var stringsHeap = metadata.StringsHeap;
for (int i = 0; i < table.Rows; i++) {
var row = table[(uint)i + 1];
columns0.Write24(writer, stringsHeap.GetOffset(row.Name));
columns1.Write24(writer, row.Signature);
}
}
/// <summary>
/// Writes a <c>ImportScope</c> table
/// </summary>
/// <param name="writer">Writer</param>
/// <param name="metadata">Metadata</param>
/// <param name="table">Table</param>
public static void Write(this DataWriter writer, Metadata metadata, MDTable<RawImportScopeRow> table) {
var columns = table.TableInfo.Columns;
var columns0 = columns[0];
var columns1 = columns[1];
for (int i = 0; i < table.Rows; i++) {
var row = table[(uint)i + 1];
columns0.Write24(writer, row.Parent);
columns1.Write24(writer, row.Imports);
}
}
/// <summary>
/// Writes a <c>StateMachineMethod</c> table
/// </summary>
/// <param name="writer">Writer</param>
/// <param name="metadata">Metadata</param>
/// <param name="table">Table</param>
public static void Write(this DataWriter writer, Metadata metadata, MDTable<RawStateMachineMethodRow> table) {
var columns = table.TableInfo.Columns;
var columns0 = columns[0];
var columns1 = columns[1];
for (int i = 0; i < table.Rows; i++) {
var row = table[(uint)i + 1];
columns0.Write24(writer, row.MoveNextMethod);
columns1.Write24(writer, row.KickoffMethod);
}
}
/// <summary>
/// Writes a <c>CustomDebugInformation</c> table
/// </summary>
/// <param name="writer">Writer</param>
/// <param name="metadata">Metadata</param>
/// <param name="table">Table</param>
public static void Write(this DataWriter writer, Metadata metadata, MDTable<RawCustomDebugInformationRow> table) {
var columns = table.TableInfo.Columns;
var columns0 = columns[0];
var columns1 = columns[1];
var columns2 = columns[2];
for (int i = 0; i < table.Rows; i++) {
var row = table[(uint)i + 1];
columns0.Write24(writer, row.Parent);
columns1.Write24(writer, row.Kind);
columns2.Write24(writer, row.Value);
}
}
}
}