From 53681bd14a87702a91a63dda97c1d288b574feb9 Mon Sep 17 00:00:00 2001 From: walon Date: Mon, 7 Apr 2025 08:04:29 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81rename=20field?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Editor/AssemblyCache.cs | 2 +- Editor/Rename/NameMaker.cs | 2 +- Editor/Rename/SymbolRename.cs | 59 +++++++++++++++++++++++++++++++++-- 3 files changed, 58 insertions(+), 5 deletions(-) diff --git a/Editor/AssemblyCache.cs b/Editor/AssemblyCache.cs index 4740fd2..558d116 100644 --- a/Editor/AssemblyCache.cs +++ b/Editor/AssemblyCache.cs @@ -67,7 +67,7 @@ namespace Obfuz { //Debug.Log($"do load module:{dllPath}"); ModuleDefMD mod = ModuleDefMD.Load(File.ReadAllBytes(dllPath), _modCtx); - mod.EnableTypeDefFindCache = true; + //mod.EnableTypeDefFindCache = true; _asmResolver.AddToCache(mod); return mod; } diff --git a/Editor/Rename/NameMaker.cs b/Editor/Rename/NameMaker.cs index 8423240..87f33c3 100644 --- a/Editor/Rename/NameMaker.cs +++ b/Editor/Rename/NameMaker.cs @@ -28,7 +28,7 @@ namespace Obfuz.Rename { private string GetDefaultNewName(string originName) { - return originName + "_generated_obfuz"; + return originName + "_xxx__"; } public string GetNewName(ModuleDefMD mod, string originalName) diff --git a/Editor/Rename/SymbolRename.cs b/Editor/Rename/SymbolRename.cs index 2985047..99f5f27 100644 --- a/Editor/Rename/SymbolRename.cs +++ b/Editor/Rename/SymbolRename.cs @@ -80,7 +80,7 @@ namespace Obfuz return false; } - private List GetReferenceMeAssemblies(ModuleDefMD mod) + private List GetReferenceMeAssemblies(ModuleDef mod) { return _ctx.assemblies.Find(ass => ass.module == mod).referenceMeAssemblies; } @@ -126,7 +126,7 @@ namespace Obfuz string newFullName = type.FullName; Debug.Log($"rename typedef. assembly:{type.Module.Name} oldName:{oldFullName} => newName:{newFullName}"); - foreach (ObfuzAssemblyInfo ass in GetReferenceMeAssemblies((ModuleDefMD)type.Module)) + foreach (ObfuzAssemblyInfo ass in GetReferenceMeAssemblies(type.Module)) { foreach (TypeRef typeRef in ass.module.GetTypeRefs()) { @@ -143,13 +143,66 @@ namespace Obfuz typeRef.Namespace = newNamespace; } typeRef.Name = newName; - Debug.Log($"rename assembly:{typeRef.DefinitionAssembly.Name} reference {oldFullName} => {typeRef.FullName}"); + Debug.Log($"rename assembly:{ass.module.Name} reference {oldFullName} => {typeRef.FullName}"); } } } private void Rename(FieldDef field) { + string oldName = field.Name; + string newName = _ctx.nameMaker.GetNewName(field, oldName); + foreach (ObfuzAssemblyInfo ass in GetReferenceMeAssemblies(field.DeclaringType.Module)) + { + foreach (MemberRef memberRef in ass.module.GetMemberRefs()) + { + if (!memberRef.IsFieldRef) + { + continue; + } + if (oldName != memberRef.Name || !TypeEqualityComparer.Instance.Equals(memberRef.FieldSig.Type, field.FieldSig.Type)) + { + continue; + } + IMemberRefParent parent = memberRef.Class; + if (parent is ITypeDefOrRef typeDefOrRef) + { + if (typeDefOrRef.IsTypeDef) + { + if (typeDefOrRef != field.DeclaringType) + { + continue; + } + } + else if (typeDefOrRef.IsTypeRef) + { + if (typeDefOrRef.ResolveTypeDefThrow() != field.DeclaringType) + { + continue; + } + } + else if (typeDefOrRef.IsTypeSpec) + { + var typeSpec = (TypeSpec)typeDefOrRef; + GenericInstSig gis = typeSpec.TryGetGenericInstSig(); + if (gis == null || gis.GenericType.ToTypeDefOrRef().ResolveTypeDef() != field.DeclaringType) + { + continue; + } + } + else + { + continue; + } + } + string oldFieldFullName = memberRef.ToString(); + memberRef.Name = newName; + + Debug.Log($"rename assembly:{ass.name} field:{oldFieldFullName} => {memberRef}"); + } + } + field.Name = newName; + Debug.Log($"rename field. {field} => {newName}"); } private void Rename(MethodDef method)