remove: remove support for Polymorphic Dll

main
walon 2026-09-29 12:10:20 +08:00
parent 40c8b6c1a8
commit 7b7865e3f0
6 changed files with 1 additions and 636 deletions

View File

@ -19,8 +19,7 @@
// SOFTWARE.
using dnlib.DotNet;
using dnlib.DotNet.PolymorphicWriter;
using HybridCLR.Editor;
using HybridCLR;
using Obfuz;
using Obfuz.Settings;
using Obfuz.Unity;
@ -101,38 +100,5 @@ namespace Obfuz4HybridCLR
Obfuscator obfuz = builder.Build();
obfuz.Run();
}
public static void GeneratePolymorphicDll(string originalDllPath, string outputDllPath)
{
ModuleDef oldMod = ModuleDefMD.Load(originalDllPath);
var obfuzSettings = ObfuzSettings.Instance;
var opt = new NewDllModuleWriterOptions(oldMod)
{
MetadataWriter = new PolymorphicMetadataWriter(obfuzSettings.polymorphicDllSettings.codeGenerationSecretKey),
};
PolymorphicModuleWriter writer = new PolymorphicModuleWriter(oldMod, opt);
writer.Write(outputDllPath);
Debug.Log($"GeneratePolymorphicDll {originalDllPath} => {outputDllPath}");
}
public static void GeneratePolymorphicCodes(string libil2cppDir)
{
PolymorphicDllSettings settings = ObfuzSettings.Instance.polymorphicDllSettings;
if (!settings.enable)
{
UnityEngine.Debug.LogWarning("Polymorphic code generation is disabled in Obfuz settings.");
return;
}
var options = new PolymorphicCodeGenerator.Options
{
GenerationSecretKey = settings.codeGenerationSecretKey,
Libil2cppDir = libil2cppDir,
TemplateDir = ObfuscateUtil.TemplatePathInPackage,
DisableLoadStandardDll = settings.disableLoadStandardDll,
};
var generator = new PolymorphicCodeGenerator(options);
generator.Generate();
}
}
}

View File

@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: 52d353fb8d6d94c4aa03452a2cd9773f
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,251 +0,0 @@
// Copyright 2025 Code Philosophy
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using dnlib.DotNet.PolymorphicWriter;
using HybridCLR.Editor.Installer;
using HybridCLR.Editor.Template;
public class PolymorphicCodeGenerator
{
public class Options
{
public string GenerationSecretKey { get; set; }
public string Libil2cppDir { get; set; }
public string TemplateDir { get; set; }
public bool DisableLoadStandardDll { get; set; } = true;
}
private readonly string _libil2cppDir;
private readonly string _metadataDir;
private readonly string _templateDir;
private readonly string _generationSecretKey;
private readonly bool _disableLoadStandardImage;
private readonly PolymorphicMetadataWriter writer;
public PolymorphicCodeGenerator(Options options)
{
_libil2cppDir = options.Libil2cppDir;
_metadataDir = Path.Combine(_libil2cppDir, "hybridclr", "metadata");
_templateDir = options.TemplateDir;
_generationSecretKey = options.GenerationSecretKey;
_disableLoadStandardImage = options.DisableLoadStandardDll;
writer = new PolymorphicMetadataWriter(_generationSecretKey);
}
private void CopyMetadataReaderHeader()
{
string srcFile = $"{_templateDir}/MetadataReader.h.tpl";
string dstFile = $"{_metadataDir}/MetadataReader.h";
File.Copy(srcFile, dstFile, true);
UnityEngine.Debug.Log($"Copy MetadataReader header from {srcFile} to {dstFile}");
}
private void GeneratePolymorphicDefs()
{
string tplFile = $"{_templateDir}/PolymorphicDefs.h.tpl";
var frr = new FileRegionReplace(File.ReadAllText(tplFile, Encoding.UTF8));
var lines = new List<string>();
lines.Add($"#define POLYMORPHIC_IMAGE_SIGNATURE \"{writer.ImageSignature}\"");
lines.Add($"\tconstexpr uint32_t kPolymorphicImageVersion = {writer.FormatVersion};");
lines.Add($"\tconstexpr uint32_t kFormatVariantVersion = {writer.FormatVariant};");
string codes = string.Join("\n", lines);
frr.Replace("POLYMORPHIC_DEFINES", codes);
string outputFile = $"{_metadataDir}/PolymorphicDefs.h";
frr.Commit(outputFile);
}
private void GeneratePolymorphicDatas()
{
string tplFile = $"{_templateDir}/PolymorphicDatas.h.tpl";
var frr = new FileRegionReplace(File.ReadAllText(tplFile, Encoding.UTF8));
List<string> lines = new List<string>();
var sb = new StringBuilder();
foreach (var type in writer.GetPolymorphicTypes())
{
var polymorphicType = writer.GetPolymorphicClassDef(type);
lines.Add($"\tstruct {type.Name}");
lines.Add("\t{");
foreach (var field in polymorphicType.Fields)
{
lines.Add($"\t\t{field.fieldWriter.CppTypeName} {field.name};");
}
lines.Add("\t\tvoid Read(MetadataReader& reader)");
lines.Add("\t\t{");
foreach (var field in polymorphicType.Fields)
{
lines.Add($"\t\t\t{field.fieldWriter.GetMarshalCode(field.name, "reader")};");
}
lines.Add("\t\t}");
lines.Add("\t};");
lines.Add("");
}
string codes = string.Join("\n", lines);
frr.Replace("POLYMORPHIC_DATA", codes);
string outputFile = $"{_metadataDir}/PolymorphicDatas.h";
frr.Commit(outputFile);
}
private void GeneratePolymorphicRawImageHeader()
{
string tplFile = $"{_templateDir}/PolymorphicRawImage.h.tpl";
var frr = new FileRegionReplace(File.ReadAllText(tplFile, Encoding.UTF8));
var tableMetaInfoMap = TableMetaInfos.tableMetaInfos.ToDictionary(t => "Raw" + t.csharpTypeName + "Row");
List<string> lines = new List<string>();
foreach (Type rowType in writer.GetPolymorphicTableRowTypes())
{
TableMetaInfo table = tableMetaInfoMap[rowType.Name];
lines.Add($"\t\tvirtual Tb{table.cppTypeName} Read{table.cppTypeName}(uint32_t rawIndex) override;");
}
frr.Replace("READ_TABLES_OVERRIDES", string.Join("\n", lines));
string outputFile = $"{_metadataDir}/PolymorphicRawImage.h";
frr.Commit(outputFile);
}
private void GeneratePolymorphicRawImageSource()
{
string tplFile = $"{_templateDir}/PolymorphicRawImage.cpp.tpl";
var frr = new FileRegionReplace(File.ReadAllText(tplFile, Encoding.UTF8));
var tableMetaInfoMap = TableMetaInfos.tableMetaInfos.ToDictionary(t => "Raw" + t.csharpTypeName + "Row");
{
List<string> lines = new List<string>();
foreach (Type rowType in writer.GetAllTableRowTypes())
{
TableMetaInfo table = tableMetaInfoMap[rowType.Name];
PolymorphicClassDef polymorphicClassDef = writer.CreateTableRowClassDefForCodeGeneration(rowType);
lines.Add("\t\t{");
lines.Add($"\t\t\tauto& table = _tableRowMetas[(int)TableType::{table.cppEnumName}];");
foreach (var fieldDef in polymorphicClassDef.Fields)
{
FieldMetaInfo field = table.fields.First(f => f.csharpName == fieldDef.name);
lines.Add($"\t\t\ttable.push_back({{{field.cppRowSize}}});");
}
lines.Add("\t\t}");
}
string codes = string.Join("\n", lines);
frr.Replace("TABLE_ROW_METADS", codes);
}
{
List<string> lines = new List<string>();
foreach (Type rowType in writer.GetPolymorphicTableRowTypes())
{
TableMetaInfo table = tableMetaInfoMap[rowType.Name];
PolymorphicClassDef polymorphicClassDef = writer.CreateTableRowClassDefForCodeGeneration(rowType);
lines.Add($"\tTb{table.cppTypeName} PolymorphicRawImage::Read{table.cppTypeName}(uint32_t rawIndex)");
lines.Add("\t{");
lines.Add($"\t\tIL2CPP_ASSERT(rawIndex > 0 && rawIndex <= GetTable(TableType::{table.cppEnumName}).rowNum);");
lines.Add($"\t\tconst byte* rowPtr = GetTableRowPtr(TableType::{table.cppEnumName}, rawIndex);");
lines.Add($"\t\tauto& rowSchema = GetRowSchema(TableType::{table.cppEnumName});");
lines.Add($"\t\tTb{table.cppTypeName} data;");
for (int i = 0; i < polymorphicClassDef.Fields.Count; i++)
{
var fieldDef = polymorphicClassDef.Fields[i];
FieldMetaInfo field = table.fields.First(f => f.csharpName == fieldDef.name);
lines.Add($"\t\tdata.{field.cppName} = ReadColumn(rowPtr, rowSchema[{i}]);");
}
lines.Add("\t\treturn data;");
lines.Add("\t}");
}
frr.Replace("READ_TABLES_IMPLEMENTATIONS", string.Join("\n", lines));
}
string outputFile = $"{_metadataDir}/PolymorphicRawImage.cpp";
frr.Commit(outputFile);
}
private void GenerateRawImageInit()
{
string tplFile = $"{_metadataDir}/Image.cpp";
var frr = new FileRegionReplace(File.ReadAllText(tplFile, Encoding.UTF8));
{
List<string> lines = new List<string>();
lines.Add(@"#include ""PolymorphicRawImage.h""");
frr.Replace("INCLUDE_RAW_IMAGE_HEADERS", string.Join("\n", lines));
}
{
List<string> lines = new List<string>();
lines.Add("\t\tif (std::strncmp((const char*)imageData, \"CODEPHPY\", 8) == 0)");
lines.Add("\t\t{");
lines.Add("\t\t\t_rawImage = new PolymorphicRawImage();");
lines.Add("\t\t}");
lines.Add("\t\telse");
lines.Add("\t\t{");
if (_disableLoadStandardImage)
{
lines.Add("\t\t\treturn LoadImageErrorCode::UNKNOWN_IMAGE_FORMAT;");
}
else
{
lines.Add("\t\t\t_rawImage = new RawImage();");
}
lines.Add("\t\t}");
lines.Add("\t\treturn LoadImageErrorCode::OK;");
frr.Replace("INIT_RAW_IMAGE", string.Join("\n", lines));
}
frr.Commit(tplFile);
}
public void Generate()
{
var installerController = new InstallerController();
if (new Version(installerController.PackageVersion) < new Version(8, 4, 0))
{
throw new Exception("Polymorphic code generation requires com.code-philosophy.hybridclr package version 8.4.0 or higher.");
}
CopyMetadataReaderHeader();
GeneratePolymorphicDefs();
GeneratePolymorphicDatas();
GeneratePolymorphicRawImageHeader();
GeneratePolymorphicRawImageSource();
GenerateRawImageInit();
}
}

View File

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: b66b21680bfc8744682ea6536aa2ec77
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,320 +0,0 @@
// Copyright 2025 Code Philosophy
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
using System.Collections.Generic;
class FieldMetaInfo {
public readonly string csharpName;
public readonly string cppName;
public readonly string cppRowSize;
public FieldMetaInfo(string csharpName, string cppName, string cppRowSize) {
this.csharpName = csharpName;
this.cppName = cppName;
this.cppRowSize = cppRowSize;
}
public FieldMetaInfo(string csharpName, string cppRowSize) : this(csharpName, csharpName.Substring(0, 1).ToLower() + csharpName.Substring(1), cppRowSize) {
}
}
class TableMetaInfo {
public readonly string csharpTypeName;
public readonly string cppTypeName;
public readonly string cppEnumName;
public readonly List<FieldMetaInfo> fields;
public TableMetaInfo(string csharpTypeName, string cppTypeName, string cppEnumName, List<FieldMetaInfo> fields) {
this.csharpTypeName = csharpTypeName;
this.cppTypeName = cppTypeName;
this.cppEnumName = cppEnumName;
this.fields = fields;
}
public TableMetaInfo(string csharpTypeName, List<FieldMetaInfo> fields) : this(csharpTypeName, csharpTypeName, csharpTypeName.ToUpper(), fields) {
}
}
class TableMetaInfos {
public static readonly List<TableMetaInfo> tableMetaInfos = new List<TableMetaInfo> {
new TableMetaInfo("Module", new List<FieldMetaInfo> {
new FieldMetaInfo("Generation", "2"),
new FieldMetaInfo("Name", "ComputStringIndexByte()"),
new FieldMetaInfo("Mvid", "ComputGUIDIndexByte()"),
new FieldMetaInfo("EncId", "ComputGUIDIndexByte()"),
new FieldMetaInfo("EncBaseId", "ComputGUIDIndexByte()"),
}),
new TableMetaInfo("TypeRef", new List<FieldMetaInfo> {
new FieldMetaInfo("ResolutionScope", "ComputTableIndexByte(TableType::MODULE, TableType::MODULEREF, TableType::ASSEMBLYREF, TableType::TYPEREF, TagBits::ResoulutionScope)"),
new FieldMetaInfo("Name", "typeName", "ComputStringIndexByte()"),
new FieldMetaInfo("Namespace", "typeNamespace", "ComputStringIndexByte()"),
}),
new TableMetaInfo("TypeDef", new List<FieldMetaInfo> {
new FieldMetaInfo("Flags", "4"),
new FieldMetaInfo("Name", "typeName", "ComputStringIndexByte()"),
new FieldMetaInfo("Namespace", "typeNamespace", "ComputStringIndexByte()"),
new FieldMetaInfo("Extends", "ComputTableIndexByte(TableType::TYPEDEF, TableType::TYPEREF, TableType::TYPESPEC, TagBits::TypeDefOrRef)"),
new FieldMetaInfo("FieldList", "ComputTableIndexByte(TableType::FIELD)"),
new FieldMetaInfo("MethodList", "ComputTableIndexByte(TableType::METHOD)"),
}),
new TableMetaInfo("FieldPtr", new List<FieldMetaInfo> {
new FieldMetaInfo("Field", "ComputTableIndexByte(TableType::FIELD)"),
}),
new TableMetaInfo("Field", new List<FieldMetaInfo> {
new FieldMetaInfo("Flags", "2"),
new FieldMetaInfo("Name", "ComputStringIndexByte()"),
new FieldMetaInfo("Signature", "ComputBlobIndexByte()"),
}),
new TableMetaInfo("MethodPtr", new List<FieldMetaInfo> {
new FieldMetaInfo("Method", "ComputTableIndexByte(TableType::METHOD)"),
}),
new TableMetaInfo("Method", new List<FieldMetaInfo> {
new FieldMetaInfo("RVA", "rva", "4"),
new FieldMetaInfo("ImplFlags", "2"),
new FieldMetaInfo("Flags", "2"),
new FieldMetaInfo("Name", "ComputStringIndexByte()"),
new FieldMetaInfo("Signature", "ComputBlobIndexByte()"),
new FieldMetaInfo("ParamList", "ComputTableIndexByte(TableType::PARAM)"),
}),
new TableMetaInfo("ParamPtr", new List<FieldMetaInfo> {
new FieldMetaInfo("Param", "ComputTableIndexByte(TableType::PARAM)"),
}),
new TableMetaInfo("Param", new List<FieldMetaInfo> {
new FieldMetaInfo("Flags", "2"),
new FieldMetaInfo("Sequence", "2"),
new FieldMetaInfo("Name", "ComputStringIndexByte()"),
}),
new TableMetaInfo("InterfaceImpl", new List<FieldMetaInfo> {
new FieldMetaInfo("Class", "classIdx", "ComputTableIndexByte(TableType::TYPEDEF)"),
new FieldMetaInfo("Interface", "interfaceIdx", "ComputTableIndexByte(TableType::TYPEDEF, TableType::TYPEREF, TableType::TYPESPEC, TagBits::TypeDefOrRef)"),
}),
new TableMetaInfo("MemberRef", new List<FieldMetaInfo> {
new FieldMetaInfo("Class", "classIdx", "ComputTableIndexByte(TableType::METHOD, TableType::MODULEREF, TableType::TYPEDEF, TableType::TYPEREF, TagBits::MemberRefParent)"),
new FieldMetaInfo("Name", "ComputStringIndexByte()"),
new FieldMetaInfo("Signature", "ComputBlobIndexByte()"),
}),
new TableMetaInfo("Constant", new List<FieldMetaInfo> {
new FieldMetaInfo("Type", "1"),
new FieldMetaInfo("Padding", "1"),
new FieldMetaInfo("Parent", "ComputTableIndexByte(TableType::PARAM, TableType::FIELD, TableType::PROPERTY, TagBits::HasConstant)"),
new FieldMetaInfo("Value", "ComputBlobIndexByte()"),
}),
new TableMetaInfo("CustomAttribute", new List<FieldMetaInfo> {
new FieldMetaInfo("Parent", "ComputTableIndexByte(HasCustomAttributeAssociateTables, sizeof(HasCustomAttributeAssociateTables) / sizeof(TableType), TagBits::HasCustomAttribute)"),
new FieldMetaInfo("Type", "ComputTableIndexByte(TableType::METHOD, TableType::MEMBERREF, TagBits::CustomAttributeType)"),
new FieldMetaInfo("Value", "ComputBlobIndexByte()"),
}),
new TableMetaInfo("FieldMarshal", new List<FieldMetaInfo> {
new FieldMetaInfo("Parent", "ComputTableIndexByte(TableType::FIELD, TableType::PARAM, TagBits::HasFieldMarshal)"),
new FieldMetaInfo("NativeType", "ComputBlobIndexByte()"),
}),
new TableMetaInfo("DeclSecurity", new List<FieldMetaInfo> {
new FieldMetaInfo("Action", "2"),
new FieldMetaInfo("Parent", "ComputTableIndexByte(TableType::TYPEDEF, TableType::METHOD, TableType::ASSEMBLY, TagBits::HasDeclSecurity)"),
new FieldMetaInfo("PermissionSet", "ComputBlobIndexByte()"),
}),
new TableMetaInfo("ClassLayout", new List<FieldMetaInfo> {
new FieldMetaInfo("PackingSize", "2"),
new FieldMetaInfo("ClassSize", "4"),
new FieldMetaInfo("Parent", "ComputTableIndexByte(TableType::TYPEDEF)"),
}),
new TableMetaInfo("FieldLayout", new List<FieldMetaInfo> {
new FieldMetaInfo("OffSet", "offset", "4"),
new FieldMetaInfo("Field", "ComputTableIndexByte(TableType::FIELD)"),
}),
new TableMetaInfo("StandAloneSig", new List<FieldMetaInfo> {
new FieldMetaInfo("Signature", "ComputBlobIndexByte()"),
}),
new TableMetaInfo("EventMap", new List<FieldMetaInfo> {
new FieldMetaInfo("Parent", "ComputTableIndexByte(TableType::TYPEDEF)"),
new FieldMetaInfo("EventList", "ComputTableIndexByte(TableType::EVENT)"),
}),
new TableMetaInfo("EventPtr", new List<FieldMetaInfo> {
new FieldMetaInfo("Event", "ComputTableIndexByte(TableType::EVENT)"),
}),
new TableMetaInfo("Event", new List<FieldMetaInfo> {
new FieldMetaInfo("EventFlags", "2"),
new FieldMetaInfo("Name", "ComputStringIndexByte()"),
new FieldMetaInfo("EventType", "ComputTableIndexByte(TableType::TYPEDEF, TableType::TYPEREF, TableType::TYPESPEC, TagBits::TypeDefOrRef)"),
}),
new TableMetaInfo("PropertyMap", new List<FieldMetaInfo> {
new FieldMetaInfo("Parent", "ComputTableIndexByte(TableType::TYPEDEF)"),
new FieldMetaInfo("PropertyList", "ComputTableIndexByte(TableType::PROPERTY)"),
}),
new TableMetaInfo("PropertyPtr", new List<FieldMetaInfo> {
new FieldMetaInfo("Property", "ComputTableIndexByte(TableType::PROPERTY)"),
}),
new TableMetaInfo("Property", new List<FieldMetaInfo> {
new FieldMetaInfo("PropFlags", "flags", "2"),
new FieldMetaInfo("Name", "ComputStringIndexByte()"),
new FieldMetaInfo("Type", "ComputBlobIndexByte()"),
}),
new TableMetaInfo("MethodSemantics", new List<FieldMetaInfo> {
new FieldMetaInfo("Semantic", "semantics", "2"),
new FieldMetaInfo("Method", "ComputTableIndexByte(TableType::METHOD)"),
new FieldMetaInfo("Association", "ComputTableIndexByte(TableType::EVENT, TableType::PROPERTY, TagBits::HasSemantics)"),
}),
new TableMetaInfo("MethodImpl", new List<FieldMetaInfo> {
new FieldMetaInfo("Class", "classIdx", "ComputTableIndexByte(TableType::TYPEDEF)"),
new FieldMetaInfo("MethodBody", "ComputTableIndexByte(TableType::METHOD, TableType::MEMBERREF, TagBits::MethodDefOrRef)"),
new FieldMetaInfo("MethodDeclaration", "ComputTableIndexByte(TableType::METHOD, TableType::MEMBERREF, TagBits::MethodDefOrRef)"),
}),
new TableMetaInfo("ModuleRef", new List<FieldMetaInfo> {
new FieldMetaInfo("Name", "ComputStringIndexByte()"),
}),
new TableMetaInfo("TypeSpec", new List<FieldMetaInfo> {
new FieldMetaInfo("Signature", "ComputBlobIndexByte()"),
}),
new TableMetaInfo("ImplMap", new List<FieldMetaInfo> {
new FieldMetaInfo("MappingFlags", "2"),
new FieldMetaInfo("MemberForwarded", "ComputTableIndexByte(TableType::FIELD, TableType::METHOD, TagBits::MemberForwarded)"),
new FieldMetaInfo("ImportName", "ComputStringIndexByte()"),
new FieldMetaInfo("ImportScope", "ComputTableIndexByte(TableType::MODULEREF)"),
}),
new TableMetaInfo("FieldRVA", new List<FieldMetaInfo> {
new FieldMetaInfo("RVA", "rva", "4"),
new FieldMetaInfo("Field", "ComputTableIndexByte(TableType::FIELD)"),
}),
new TableMetaInfo("ENCLog","EncLog", "ENCLOG", new List<FieldMetaInfo> {
new FieldMetaInfo("Token", "4"),
new FieldMetaInfo("FuncCode", "4"),
}),
new TableMetaInfo("ENCMap", "EncMap", "ENCMAP", new List<FieldMetaInfo> {
new FieldMetaInfo("Token", "4"),
}),
new TableMetaInfo("Assembly", new List<FieldMetaInfo> {
new FieldMetaInfo("HashAlgId", "4"),
new FieldMetaInfo("MajorVersion", "2"),
new FieldMetaInfo("MinorVersion", "2"),
new FieldMetaInfo("BuildNumber", "2"),
new FieldMetaInfo("RevisionNumber", "2"),
new FieldMetaInfo("Flags", "4"),
new FieldMetaInfo("PublicKey", "ComputBlobIndexByte()"),
new FieldMetaInfo("Name", "ComputStringIndexByte()"),
new FieldMetaInfo("Locale", "ComputStringIndexByte()"),
}),
new TableMetaInfo("AssemblyProcessor", new List<FieldMetaInfo> {
new FieldMetaInfo("Processor", "4"),
}),
new TableMetaInfo("AssemblyOS", new List<FieldMetaInfo> {
new FieldMetaInfo("OSPlatformId", "osPlatformId", "4"),
new FieldMetaInfo("OSMajorVersion", "osMajorVersion", "4"),
new FieldMetaInfo("OSMinorVersion", "osMinorVersion", "4"),
}),
new TableMetaInfo("AssemblyRef", new List<FieldMetaInfo> {
new FieldMetaInfo("MajorVersion", "2"),
new FieldMetaInfo("MinorVersion", "2"),
new FieldMetaInfo("BuildNumber", "2"),
new FieldMetaInfo("RevisionNumber", "2"),
new FieldMetaInfo("Flags", "4"),
new FieldMetaInfo("PublicKeyOrToken", "ComputBlobIndexByte()"),
new FieldMetaInfo("Name", "ComputStringIndexByte()"),
new FieldMetaInfo("Locale", "ComputStringIndexByte()"),
new FieldMetaInfo("HashValue", "ComputBlobIndexByte()"),
}),
new TableMetaInfo("AssemblyRefProcessor", new List<FieldMetaInfo> {
new FieldMetaInfo("AssemblyRef", "4"),
new FieldMetaInfo("Processor", "ComputTableIndexByte(TableType::ASSEMBLYREF)"),
}),
new TableMetaInfo("AssemblyRefOS", new List<FieldMetaInfo> {
new FieldMetaInfo("OSPlatformId", "osPlatformId", "4"),
new FieldMetaInfo("OSMajorVersion", "osMajorVersion", "4"),
new FieldMetaInfo("OSMinorVersion", "osMinorVersion", "4"),
new FieldMetaInfo("AssemblyRef", "ComputTableIndexByte(TableType::ASSEMBLYREF)"),
}),
new TableMetaInfo("File", new List<FieldMetaInfo> {
new FieldMetaInfo("Flags", "4"),
new FieldMetaInfo("Name", "ComputStringIndexByte()"),
new FieldMetaInfo("HashValue", "ComputBlobIndexByte()"),
}),
new TableMetaInfo("ExportedType", new List<FieldMetaInfo> {
new FieldMetaInfo("Flags", "4"),
new FieldMetaInfo("TypeDefId", "4"),
new FieldMetaInfo("TypeName", "ComputStringIndexByte()"),
new FieldMetaInfo("TypeNamespace", "ComputStringIndexByte()"),
new FieldMetaInfo("Implementation", "ComputTableIndexByte(TableType::FILE, TableType::EXPORTEDTYPE, TableType::ASSEMBLY, TagBits::Implementation)"),
}),
new TableMetaInfo("ManifestResource", new List<FieldMetaInfo> {
new FieldMetaInfo("Offset", "4"),
new FieldMetaInfo("Flags", "4"),
new FieldMetaInfo("Name", "ComputStringIndexByte()"),
new FieldMetaInfo("Implementation", "ComputTableIndexByte(TableType::FILE, TableType::ASSEMBLYREF, TagBits::Implementation)"),
}),
new TableMetaInfo("NestedClass", new List<FieldMetaInfo> {
new FieldMetaInfo("NestedClass", "ComputTableIndexByte(TableType::TYPEDEF)"),
new FieldMetaInfo("EnclosingClass", "ComputTableIndexByte(TableType::TYPEDEF)"),
}),
new TableMetaInfo("GenericParam", new List<FieldMetaInfo> {
new FieldMetaInfo("Number", "2"),
new FieldMetaInfo("Flags", "2"),
new FieldMetaInfo("Owner", "ComputTableIndexByte(TableType::TYPEDEF, TableType::METHOD, TagBits::TypeOrMethodDef)"),
new FieldMetaInfo("Name", "ComputStringIndexByte()"),
}),
new TableMetaInfo("MethodSpec", new List<FieldMetaInfo> {
new FieldMetaInfo("Method", "ComputTableIndexByte(TableType::METHOD, TableType::MEMBERREF, TagBits::MethodDefOrRef)"),
new FieldMetaInfo("Instantiation", "ComputBlobIndexByte()"),
}),
new TableMetaInfo("GenericParamConstraint", new List<FieldMetaInfo> {
new FieldMetaInfo("Owner", "ComputTableIndexByte(TableType::GENERICPARAM)"),
new FieldMetaInfo("Constraint", "ComputTableIndexByte(TableType::TYPEDEF, TableType::TYPEREF, TableType::TYPESPEC, TagBits::TypeDefOrRef)"),
}),
new TableMetaInfo("Document", new List<FieldMetaInfo> {
new FieldMetaInfo("Name", "ComputBlobIndexByte()"),
new FieldMetaInfo("HashAlgorithm", "ComputGUIDIndexByte()"),
new FieldMetaInfo("Hash", "ComputBlobIndexByte()"),
new FieldMetaInfo("Language", "ComputGUIDIndexByte()"),
}),
new TableMetaInfo("MethodDebugInformation", new List<FieldMetaInfo> {
new FieldMetaInfo("Document", "ComputTableIndexByte(TableType::DOCUMENT)"),
new FieldMetaInfo("SequencePoints", "ComputBlobIndexByte()"),
}),
new TableMetaInfo("LocalScope", new List<FieldMetaInfo> {
new FieldMetaInfo("Method", "ComputTableIndexByte(TableType::METHOD)"),
new FieldMetaInfo("ImportScope", "ComputTableIndexByte(TableType::IMPORTSCOPE)"),
new FieldMetaInfo("VariableList", "variables", "ComputTableIndexByte(TableType::LOCALVARIABLE)"),
new FieldMetaInfo("ConstantList", "constants", "ComputTableIndexByte(TableType::LOCALCONSTANT)"),
new FieldMetaInfo("StartOffset", "4"),
new FieldMetaInfo("Length", "4"),
}),
new TableMetaInfo("LocalVariable", new List<FieldMetaInfo> {
new FieldMetaInfo("Attributes", "2"),
new FieldMetaInfo("Index", "2"),
new FieldMetaInfo("Name", "ComputStringIndexByte()"),
}),
new TableMetaInfo("LocalConstant", new List<FieldMetaInfo> {
new FieldMetaInfo("Name", "ComputStringIndexByte()"),
new FieldMetaInfo("Signature", "ComputBlobIndexByte()"),
}),
new TableMetaInfo("ImportScope", new List<FieldMetaInfo> {
new FieldMetaInfo("Parent", "ComputTableIndexByte(TableType::IMPORTSCOPE)"),
new FieldMetaInfo("Imports", "ComputBlobIndexByte()"),
}),
new TableMetaInfo("StateMachineMethod", new List<FieldMetaInfo> {
new FieldMetaInfo("MoveNextMethod", "ComputTableIndexByte(TableType::METHOD)"),
new FieldMetaInfo("KickoffMethod", "ComputTableIndexByte(TableType::METHOD)"),
}),
new TableMetaInfo("CustomDebugInformation", new List<FieldMetaInfo> {
new FieldMetaInfo("Parent", "ComputTableIndexByte(HasCustomDebugInformation, sizeof(HasCustomDebugInformation) / sizeof(TableType), TagBits::HasCustomDebugInformation)"),
new FieldMetaInfo("Kind", "ComputGUIDIndexByte()"),
new FieldMetaInfo("Value", "ComputBlobIndexByte()"),
}),
};
}

View File

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: ef98af767d086bd428f52503188789b1
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: