接入obfuz->2.0

This commit is contained in:
Alex-Rachel
2025-07-26 08:10:41 +08:00
parent f2c7ff4336
commit cb86d8868e
713 changed files with 57092 additions and 10 deletions

View File

@@ -0,0 +1,49 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using dnlib.DotNet;
using HybridCLR.Editor.Meta;
using UnityEditor;
using UnityEngine;
using IAssemblyResolver = HybridCLR.Editor.Meta.IAssemblyResolver;
namespace HybridCLR.Editor.Link
{
public class Analyzer
{
private readonly IAssemblyResolver _resolver;
public Analyzer(IAssemblyResolver resolver)
{
_resolver = resolver;
}
public HashSet<TypeRef> CollectRefs(List<string> rootAssemblies)
{
var assCollector = new AssemblyCache(_resolver);
var rootAssemblyNames = new HashSet<string>(rootAssemblies);
var typeRefs = new HashSet<TypeRef>(TypeEqualityComparer.Instance);
foreach (var rootAss in rootAssemblies)
{
var dnAss = assCollector.LoadModule(rootAss, false);
foreach (var type in dnAss.GetTypeRefs())
{
if (type.DefinitionAssembly == null)
{
Debug.LogWarning($"assembly:{dnAss.Name} TypeRef {type.FullName} has no DefinitionAssembly");
continue;
}
if (!rootAssemblyNames.Contains(type.DefinitionAssembly.Name.ToString()))
{
typeRefs.Add(type);
}
}
}
return typeRefs;
}
}
}

View File

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

View File

@@ -0,0 +1,53 @@
using dnlib.DotNet;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace HybridCLR.Editor.Link
{
public class LinkXmlWriter
{
public void Write(string outputLinkXmlFile, HashSet<TypeRef> refTypes)
{
string parentDir = Directory.GetParent(outputLinkXmlFile).FullName;
Directory.CreateDirectory(parentDir);
var writer = System.Xml.XmlWriter.Create(outputLinkXmlFile,
new System.Xml.XmlWriterSettings { Encoding = Encoding.UTF8, Indent = true});
writer.WriteStartDocument();
writer.WriteStartElement("linker");
var typesByAssembly = refTypes.GroupBy(t => t.DefinitionAssembly.Name.String).ToList();
typesByAssembly.Sort((a, b) => String.Compare(a.Key, b.Key, StringComparison.Ordinal));
foreach(var assembly in typesByAssembly)
{
writer.WriteStartElement("assembly");
writer.WriteAttributeString("fullname", assembly.Key);
List<string> assTypeNames = assembly.Select(t => t.FullName).ToList();
assTypeNames.Sort(string.CompareOrdinal);
foreach(var typeName in assTypeNames)
{
#if UNITY_2023_1_OR_NEWER
if (typeName == "UnityEngine.Debug")
{
continue;
}
#endif
writer.WriteStartElement("type");
writer.WriteAttributeString("fullname", typeName);
writer.WriteAttributeString("preserve", "all");
writer.WriteEndElement();
}
writer.WriteEndElement();
}
writer.WriteEndElement();
writer.WriteEndDocument();
writer.Close();
}
}
}

View File

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