From 338543c5a0c0a5f5e957e5c55ff038b75d8d90e2 Mon Sep 17 00:00:00 2001 From: walon Date: Wed, 16 Apr 2025 18:30:51 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81=E5=A2=9E=E9=87=8F=E6=B7=B7?= =?UTF-8?q?=E6=B7=86=EF=BC=8C=E4=BC=98=E5=85=88=E4=BB=8Eremapping.xml?= =?UTF-8?q?=E4=B8=AD=E8=AF=BB=E5=8F=96=E6=98=A0=E5=B0=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Editor/Rename/RenameRecordMap.cs | 112 ++++++++++++++++++++++++++----- Editor/Rename/SymbolRename.cs | 28 ++++---- 2 files changed, 109 insertions(+), 31 deletions(-) diff --git a/Editor/Rename/RenameRecordMap.cs b/Editor/Rename/RenameRecordMap.cs index 22001a7..43a29b1 100644 --- a/Editor/Rename/RenameRecordMap.cs +++ b/Editor/Rename/RenameRecordMap.cs @@ -24,6 +24,7 @@ namespace Obfuz public string signature; public string oldName; public string newName; + public object renameMappingData; } private class RenameMappingField @@ -112,13 +113,6 @@ namespace Obfuz ModuleDefMD mod = ObfuzAssemblyInfo.module; string name = mod.Assembly.Name; nameMaker.AddPreservedName(mod, name); - _modRenames.Add(mod, new RenameRecord - { - status = RenameStatus.NotRenamed, - signature = name, - oldName = name, - newName = null, - }); RenameMappingAssembly rma = _assemblies.GetValueOrDefault(name); if (rma != null && rma.status == RenameStatus.Renamed) @@ -126,6 +120,15 @@ namespace Obfuz nameMaker.AddPreservedName(mod, rma.newAssName); } + _modRenames.Add(mod, new RenameRecord + { + status = RenameStatus.NotRenamed, + signature = name, + oldName = name, + newName = null, + renameMappingData = rma, + }); + foreach (TypeDef type in mod.GetTypes()) { nameMaker.AddPreservedName(type, name); @@ -145,6 +148,7 @@ namespace Obfuz signature = fullTypeName, oldName = fullTypeName, newName = null, + renameMappingData = rmt, }); foreach (MethodDef method in type.Methods) { @@ -163,6 +167,7 @@ namespace Obfuz signature = methodSig, oldName = method.Name, newName = null, + renameMappingData = rmm, }); foreach (Parameter param in method.Parameters) { @@ -193,6 +198,7 @@ namespace Obfuz signature = fieldSig, oldName = field.Name, newName = null, + renameMappingData = rmf, }); } foreach (PropertyDef property in type.Properties) @@ -210,6 +216,7 @@ namespace Obfuz signature = propertySig, oldName = property.Name, newName = null, + renameMappingData = rmp, }); } foreach (EventDef eventDef in type.Events) @@ -227,6 +234,7 @@ namespace Obfuz signature = eventSig, oldName = eventDef.Name, newName = null, + renameMappingData = rme, }); } } @@ -551,17 +559,6 @@ namespace Obfuz }); } - public bool TryGetRename(VirtualMethodGroup group, out string newName) - { - if (_virtualMethodGroups.TryGetValue(group, out var record)) - { - newName = record.newName; - return true; - } - newName = null; - return false; - } - public void AddRename(FieldDef field, string newName) { RenameRecord record = _fieldRenames[field]; @@ -582,5 +579,84 @@ namespace Obfuz record.status = RenameStatus.Renamed; record.newName = newName; } + + public bool TryGetExistRenameMapping(ModuleDefMD mod, out string newName) + { + if (_modRenames.TryGetValue(mod, out var record) && record.renameMappingData != null) + { + newName = ((RenameMappingAssembly)record.renameMappingData).newAssName; + return true; + } + newName = null; + return false; + } + + public bool TryGetExistRenameMapping(TypeDef type, out string newNamespace, out string newName) + { + if (_typeRenames.TryGetValue(type, out var record) && record.renameMappingData != null) + { + var rmt = (RenameMappingType)record.renameMappingData; + (newNamespace, newName) = MetaUtil.SplitNamespaceAndName(rmt.newFullName); + return true; + } + newNamespace = null; + newName = null; + return false; + } + + public bool TryGetExistRenameMapping(MethodDef method, out string newName) + { + if (_methodRenames.TryGetValue(method, out var record) && record.renameMappingData != null) + { + newName = ((RenameMappingMethod)record.renameMappingData).newName; + return true; + } + newName = null; + return false; + } + + public bool TryGetExistRenameMapping(FieldDef field, out string newName) + { + if (_fieldRenames.TryGetValue(field, out var record) && record.renameMappingData != null) + { + newName = ((RenameMappingField)record.renameMappingData).newName; + return true; + } + newName = null; + return false; + } + + public bool TryGetExistRenameMapping(PropertyDef property, out string newName) + { + if (_propertyRenames.TryGetValue(property, out var record) && record.renameMappingData != null) + { + newName = ((RenameMappingProperty)record.renameMappingData).newName; + return true; + } + newName = null; + return false; + } + + public bool TryGetExistRenameMapping(EventDef eventDef, out string newName) + { + if (_eventRenames.TryGetValue(eventDef, out var record) && record.renameMappingData != null) + { + newName = ((RenameMappingEvent)record.renameMappingData).newName; + return true; + } + newName = null; + return false; + } + + public bool TryGetRename(VirtualMethodGroup group, out string newName) + { + if (_virtualMethodGroups.TryGetValue(group, out var record)) + { + newName = record.newName; + return true; + } + newName = null; + return false; + } } } diff --git a/Editor/Rename/SymbolRename.cs b/Editor/Rename/SymbolRename.cs index 69a4437..f36a353 100644 --- a/Editor/Rename/SymbolRename.cs +++ b/Editor/Rename/SymbolRename.cs @@ -434,7 +434,7 @@ namespace Obfuz groupNeedRenames.Add(group, needRename); if (needRename) { - _renameRecordMap.InitAndAddRename(group, _nameMaker.GetNewName(method, method.Name)); + _renameRecordMap.InitAndAddRename(group, _renameRecordMap.TryGetExistRenameMapping(method, out var nn) ? nn : _nameMaker.GetNewName(method, method.Name)); } } if (!needRename) @@ -546,7 +546,7 @@ namespace Obfuz private void Rename(ModuleDefMD mod) { string oldName = mod.Assembly.Name; - string newName = _nameMaker.GetNewName(mod, oldName); + string newName = _renameRecordMap.TryGetExistRenameMapping(mod, out var n) ? n : _nameMaker.GetNewName(mod, oldName); _renameRecordMap.AddRename(mod, newName); mod.Assembly.Name = newName; mod.Name = $"{newName}.dll"; @@ -570,20 +570,22 @@ namespace Obfuz string moduleName = MetaUtil.GetModuleNameWithoutExt(type.Module.Name); string oldFullName = type.FullName; string oldNamespace = type.Namespace; + + string oldName = type.Name; + string newNamespace; - if (string.IsNullOrEmpty(oldNamespace)) + string newName; + if (_renameRecordMap.TryGetExistRenameMapping(type, out var nns, out var nn)) { - newNamespace = oldNamespace; + newNamespace = nns; + newName = nn; } else { newNamespace = _nameMaker.GetNewNamespace(type, oldNamespace, true); - type.Namespace = newNamespace; + newName = _nameMaker.GetNewName(type, oldName); } - string oldName = type.Name; - string newName = _nameMaker.GetNewName(type, oldName); - if (refTypeDefMeta != null) { foreach (TypeRef typeRef in refTypeDefMeta.typeRefs) @@ -599,6 +601,7 @@ namespace Obfuz } } type.Name = newName; + type.Namespace = newNamespace; string newFullName = type.FullName; _renameRecordMap.AddRename(type, newFullName); //Debug.Log($"rename typedef. assembly:{type.Module.Name} oldName:{oldFullName} => newName:{newFullName}"); @@ -607,7 +610,7 @@ namespace Obfuz private void Rename(FieldDef field, RefFieldMetas fieldMetas) { string oldName = field.Name; - string newName = _nameMaker.GetNewName(field, oldName); + string newName = _renameRecordMap.TryGetExistRenameMapping(field, out var nn) ? nn : _nameMaker.GetNewName(field, oldName); if (fieldMetas != null) { foreach (var memberRef in fieldMetas.fieldRefs) @@ -635,13 +638,12 @@ namespace Obfuz private void Rename(MethodDef method, RefMethodMetas refMethodMetas) { string oldName = method.Name; - string newName = _nameMaker.GetNewName(method, oldName); + string newName = _renameRecordMap.TryGetExistRenameMapping(method, out var nn) ? nn : _nameMaker.GetNewName(method, oldName); Rename(method, refMethodMetas, newName); } private void Rename(MethodDef method, RefMethodMetas refMethodMetas, string newName) { - ModuleDefMD mod = (ModuleDefMD)method.DeclaringType.Module; RenameMethodParams(method); RenameMethodBody(method); @@ -690,7 +692,7 @@ namespace Obfuz private void Rename(EventDef eventDef) { string oldName = eventDef.Name; - string newName = _nameMaker.GetNewName(eventDef, eventDef.Name); + string newName = _renameRecordMap.TryGetExistRenameMapping(eventDef, out var nn) ? nn : _nameMaker.GetNewName(eventDef, eventDef.Name); _renameRecordMap.AddRename(eventDef, newName); eventDef.Name = newName; } @@ -698,7 +700,7 @@ namespace Obfuz private void Rename(PropertyDef property, RefPropertyMetas refPropertyMetas) { string oldName = property.Name; - string newName = _nameMaker.GetNewName(property, oldName); + string newName = _renameRecordMap.TryGetExistRenameMapping(property, out var nn) ? nn : _nameMaker.GetNewName(property, oldName); if (refPropertyMetas != null) {