From def8fb168cabbba014f35ba3a5b3d8352bc5ad95 Mon Sep 17 00:00:00 2001 From: walon Date: Wed, 16 Apr 2025 13:34:53 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E6=9E=84=20RenameRecordMap?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Editor/Rename/RenameRecordMap.cs | 264 ++++++++++++------------------- Editor/Rename/SymbolRename.cs | 58 ++----- Editor/TypeSigUtil.cs | 5 +- 3 files changed, 118 insertions(+), 209 deletions(-) diff --git a/Editor/Rename/RenameRecordMap.cs b/Editor/Rename/RenameRecordMap.cs index 8602d34..f2e5852 100644 --- a/Editor/Rename/RenameRecordMap.cs +++ b/Editor/Rename/RenameRecordMap.cs @@ -118,13 +118,69 @@ namespace Obfuz oldName = name, newName = null, }); - _modRenames.Add(mod, new RenameRecord + foreach (TypeDef type in mod.GetTypes()) { - status = RenameStatus.NotRenamed, - signature = mod.Assembly.Name, - oldName = mod.Assembly.Name, - newName = null, - }); + _typeRenames.Add(type, new RenameRecord + { + status = RenameStatus.NotRenamed, + signature = type.FullName, + oldName = type.FullName, + newName = null, + }); + foreach (MethodDef method in type.Methods) + { + _methodRenames.Add(method, new RenameRecord + { + status = RenameStatus.NotRenamed, + signature = TypeSigUtil.ComputeMethodDefSignature(method), + oldName = method.Name, + newName = null, + }); + foreach (Parameter param in method.Parameters) + { + if (param.ParamDef != null) + { + _paramRenames.Add(param.ParamDef, new RenameRecord + { + status = RenameStatus.NotRenamed, + signature = param.Name, + oldName = param.Name, + newName = null, + }); + } + } + } + foreach (FieldDef field in type.Fields) + { + _fieldRenames.Add(field, new RenameRecord + { + status = RenameStatus.NotRenamed, + signature = TypeSigUtil.ComputeFieldDefSignature(field), + oldName = field.Name, + newName = null, + }); + } + foreach (PropertyDef property in type.Properties) + { + _propertyRenames.Add(property, new RenameRecord + { + status = RenameStatus.NotRenamed, + signature = TypeSigUtil.ComputePropertyDefSignature(property), + oldName = property.Name, + newName = null, + }); + } + foreach (EventDef eventDef in type.Events) + { + _eventRenames.Add(eventDef, new RenameRecord + { + status = RenameStatus.NotRenamed, + signature = TypeSigUtil.ComputeEventDefSignature(eventDef), + oldName = eventDef.Name, + newName = null, + }); + } + } } } @@ -215,7 +271,7 @@ namespace Obfuz { signature = signature, newName = newName, - status = System.Enum.Parse(ele.Attributes["status"].Value), + status = RenameStatus.Renamed, }; foreach (XmlNode node in ele.ChildNodes) { @@ -240,7 +296,7 @@ namespace Obfuz { index = int.Parse(index), newName = newName, - status = System.Enum.Parse(ele.Attributes["status"].Value), + status = RenameStatus.Renamed, }; method.parameters.Add(rmp); } @@ -253,7 +309,7 @@ namespace Obfuz { signature = signature, newName = newName, - status = System.Enum.Parse(ele.Attributes["status"].Value), + status = RenameStatus.Renamed, }; type.fields.Add(signature, rmf); } @@ -266,7 +322,7 @@ namespace Obfuz { signature = signature, newName = newName, - status = System.Enum.Parse(ele.Attributes["status"].Value), + status = RenameStatus.Renamed, }; type.properties.Add(signature, rmp); } @@ -279,7 +335,7 @@ namespace Obfuz { signature = signature, newName = newName, - status = System.Enum.Parse(ele.Attributes["status"].Value), + status = RenameStatus.Renamed, }; type.events.Add(signature, rme); } @@ -408,194 +464,76 @@ namespace Obfuz methodEle.AppendChild(paramNode); } - public void AddRenameRecord(ModuleDefMD mod, string oldName, string newName) + public void AddRename(ModuleDefMD mod, string newName) { - _modRenames.Add(mod, new RenameRecord - { - status = RenameStatus.Renamed, - signature = oldName, - oldName = oldName, - newName = newName - }); + RenameRecord record = _modRenames[mod]; + record.status = RenameStatus.Renamed; + record.newName = newName; } - public void AddRenameRecord(TypeDef type, string oldName, string newName) + public void AddRename(TypeDef type, string newName) { - _typeRenames.Add(type, new RenameRecord - { - status = RenameStatus.Renamed, - signature = oldName, - oldName = oldName, - newName = newName - }); + RenameRecord record = _typeRenames[type]; + record.status = RenameStatus.Renamed; + record.newName = newName; } - public void AddRenameRecord(MethodDef method, string signature, string oldName, string newName) + public void AddRename(MethodDef method, string newName) { - _methodRenames.Add(method, new RenameRecord - { - status = RenameStatus.Renamed, - signature = signature, - oldName = oldName, - newName = newName - }); + RenameRecord record = _methodRenames[method]; + record.status = RenameStatus.Renamed; + record.newName = newName; } - public void AddRenameRecord(ParamDef paramDef, string oldName, string newName) + public void AddRename(ParamDef paramDef, string newName) { - _paramRenames.Add(paramDef, new RenameRecord - { - status = RenameStatus.Renamed, - signature = oldName, - oldName = oldName, - newName = newName - }); + RenameRecord record = _paramRenames[paramDef]; + record.status = RenameStatus.Renamed; + record.newName = newName; } - public void AddRenameRecord(VirtualMethodGroup methodGroup, string signature, string oldName, string newName) + public void InitAndAddRename(VirtualMethodGroup methodGroup, string newName) { + RenameRecord methodRecord = _methodRenames[methodGroup.methods[0]]; _virtualMethodGroups.Add(methodGroup, new RenameRecord { status = RenameStatus.Renamed, - signature = signature, - oldName = oldName, - newName = newName + signature = methodRecord.signature, + oldName = methodRecord.oldName, + newName = newName, }); } - public bool TryGetRenameRecord(VirtualMethodGroup group, out string oldName, out string newName) + public bool TryGetRename(VirtualMethodGroup group, out string newName) { if (_virtualMethodGroups.TryGetValue(group, out var record)) { - oldName = record.oldName; newName = record.newName; return true; } - oldName = null; newName = null; return false; } - public void AddRenameRecord(FieldDef field, string signature, string oldName, string newName) + public void AddRename(FieldDef field, string newName) { - _fieldRenames.Add(field, new RenameRecord - { - status = RenameStatus.Renamed, - signature = signature, - oldName = oldName, - newName = newName - }); + RenameRecord record = _fieldRenames[field]; + record.status = RenameStatus.Renamed; + record.newName = newName; } - public void AddRenameRecord(PropertyDef property, string signature, string oldName, string newName) + public void AddRename(PropertyDef property, string newName) { - _propertyRenames.Add(property, new RenameRecord - { - status = RenameStatus.Renamed, - signature = signature, - oldName = oldName, - newName = newName - }); + RenameRecord record = _propertyRenames[property]; + record.status = RenameStatus.Renamed; + record.newName = newName; } - public void AddRenameRecord(EventDef eventDef, string signature, string oldName, string newName) + public void AddRename(EventDef eventDef, string newName) { - _eventRenames.Add(eventDef, new RenameRecord - { - status = RenameStatus.Renamed, - signature = signature, - oldName = oldName, - newName = newName - }); + RenameRecord record = _eventRenames[eventDef]; + record.status = RenameStatus.Renamed; + record.newName = newName; } - - public void AddUnRenameRecord(ModuleDefMD mod) - { - _modRenames.Add(mod, new RenameRecord - { - status = RenameStatus.NotRenamed, - signature = mod.Assembly.Name, - oldName = mod.Assembly.Name, - newName = null, - }); - } - - public void AddUnRenameRecord(TypeDef typeDef) - { - _typeRenames.Add(typeDef, new RenameRecord - { - status = RenameStatus.NotRenamed, - signature = typeDef.FullName, - oldName = typeDef.FullName, - newName = null, - }); - } - - public void AddUnRenameRecord(MethodDef methodDef) - { - _methodRenames.Add(methodDef, new RenameRecord - { - status = RenameStatus.NotRenamed, - signature = methodDef.FullName, - oldName = methodDef.Name, - newName = null, - }); - } - - public void AddUnRenameRecord(ParamDef paramDef) - { - _paramRenames.Add(paramDef, new RenameRecord - { - status = RenameStatus.NotRenamed, - signature = paramDef.Name, - oldName = paramDef.Name, - newName = null, - }); - } - - public void AddUnRenameRecord(VirtualMethodGroup methodGroup) - { - _virtualMethodGroups.Add(methodGroup, new RenameRecord - { - status = RenameStatus.NotRenamed, - signature = methodGroup.methods[0].FullName, - oldName = methodGroup.methods[0].Name, - newName = null, - }); - } - - public void AddUnRenameRecord(FieldDef fieldDef) - { - _fieldRenames.Add(fieldDef, new RenameRecord - { - status = RenameStatus.NotRenamed, - signature = fieldDef.FullName, - oldName = fieldDef.Name, - newName = null, - }); - } - - public void AddUnRenameRecord(PropertyDef propertyDef) - { - _propertyRenames.Add(propertyDef, new RenameRecord - { - status = RenameStatus.NotRenamed, - signature = propertyDef.FullName, - oldName = propertyDef.Name, - newName = null, - }); - } - - public void AddUnRenameRecord(EventDef eventDef) - { - _eventRenames.Add(eventDef, new RenameRecord - { - status = RenameStatus.NotRenamed, - signature = eventDef.FullName, - oldName = eventDef.Name, - newName = null, - }); - } - } } diff --git a/Editor/Rename/SymbolRename.cs b/Editor/Rename/SymbolRename.cs index a6d9b65..b033d40 100644 --- a/Editor/Rename/SymbolRename.cs +++ b/Editor/Rename/SymbolRename.cs @@ -118,6 +118,7 @@ namespace Obfuz public void Process() { + _renameRecordMap.Init(_obfuzAssemblies); RenameModules(); RenameTypes(); RenameFields(); @@ -140,10 +141,6 @@ namespace Obfuz { Rename(ass.module); } - else - { - _renameRecordMap.AddUnRenameRecord(ass.module); - } } Debug.Log("Rename Modules end"); } @@ -241,10 +238,6 @@ namespace Obfuz { Rename(type, _refTypeRefMetasMap.TryGetValue(type, out var typeDefMetas) ? typeDefMetas : null); } - else - { - _renameRecordMap.AddUnRenameRecord(type); - } } } @@ -351,10 +344,6 @@ namespace Obfuz { Rename(field, refFieldMetasMap.TryGetValue(field, out var fieldMetas) ? fieldMetas : null); } - else - { - _renameRecordMap.AddUnRenameRecord(field); - } } } } @@ -423,10 +412,6 @@ namespace Obfuz { Rename(method, refMethodMetasMap.TryGetValue(method, out var refMethodMetas) ? refMethodMetas : null); } - else - { - _renameRecordMap.AddUnRenameRecord(method); - } } } } @@ -449,21 +434,16 @@ namespace Obfuz groupNeedRenames.Add(group, needRename); if (needRename) { - _renameRecordMap.AddRenameRecord(group, method.FullName, method.Name, _nameMaker.GetNewName(method, method.Name)); - } - else - { - _renameRecordMap.AddUnRenameRecord(group); + _renameRecordMap.InitAndAddRename(group, _nameMaker.GetNewName(method, method.Name)); } } if (!needRename) { - _renameRecordMap.AddUnRenameRecord(method); continue; } - if (_renameRecordMap.TryGetRenameRecord(group, out var oldName, out var newName)) + if (_renameRecordMap.TryGetRename(group, out var newName)) { - Rename(method, refMethodMetasMap.TryGetValue(method, out var refMethodMetas) ? refMethodMetas : null, oldName, newName); + Rename(method, refMethodMetasMap.TryGetValue(method, out var refMethodMetas) ? refMethodMetas : null, newName); } else { @@ -538,10 +518,6 @@ namespace Obfuz { Rename(property, refPropertyMetasMap.TryGetValue(property, out var refPropertyMeta) ? refPropertyMeta : null); } - else - { - _renameRecordMap.AddUnRenameRecord(property); - } } } } @@ -561,10 +537,6 @@ namespace Obfuz { Rename(eventDef); } - else - { - _renameRecordMap.AddUnRenameRecord(eventDef); - } } } } @@ -575,7 +547,7 @@ namespace Obfuz { string oldName = MetaUtil.GetModuleNameWithoutExt(mod.Name); string newName = _nameMaker.GetNewName(mod, oldName); - _renameRecordMap.AddRenameRecord(mod, oldName, newName); + _renameRecordMap.AddRename(mod, newName); mod.Name = $"{newName}.dll"; //Debug.Log($"rename module. oldName:{oldName} newName:{newName}"); foreach (ObfuzAssemblyInfo ass in GetReferenceMeAssemblies(mod)) @@ -626,7 +598,7 @@ namespace Obfuz } type.Name = newName; string newFullName = type.FullName; - _renameRecordMap.AddRenameRecord(type, oldFullName, newFullName); + _renameRecordMap.AddRename(type, newFullName); //Debug.Log($"rename typedef. assembly:{type.Module.Name} oldName:{oldFullName} => newName:{newFullName}"); } @@ -653,7 +625,7 @@ namespace Obfuz } } //Debug.Log($"rename field. {field} => {newName}"); - _renameRecordMap.AddRenameRecord(field, field.FullName, oldName, newName); + _renameRecordMap.AddRename(field, newName); field.Name = newName; } @@ -662,10 +634,10 @@ namespace Obfuz { string oldName = method.Name; string newName = _nameMaker.GetNewName(method, oldName); - Rename(method, refMethodMetas, oldName, newName); + Rename(method, refMethodMetas, newName); } - private void Rename(MethodDef method, RefMethodMetas refMethodMetas, string oldName, string newName) + private void Rename(MethodDef method, RefMethodMetas refMethodMetas, string newName) { ModuleDefMD mod = (ModuleDefMD)method.DeclaringType.Module; @@ -680,7 +652,7 @@ namespace Obfuz //Debug.Log($"rename assembly:{memberRef.Module.Name} method:{oldMethodFullName} => {memberRef}"); } } - _renameRecordMap.AddRenameRecord(method, method.FullName, oldName, newName); + _renameRecordMap.AddRename(method, newName); method.Name = newName; } @@ -708,20 +680,16 @@ namespace Obfuz if (_renamePolicy.NeedRename(param)) { string newName = _nameMaker.GetNewName(param, param.Name); - _renameRecordMap.AddRenameRecord(param, param.Name, newName); + _renameRecordMap.AddRename(param, newName); param.Name = newName; } - else - { - _renameRecordMap.AddUnRenameRecord(param); - } } private void Rename(EventDef eventDef) { string oldName = eventDef.Name; string newName = _nameMaker.GetNewName(eventDef, eventDef.Name); - _renameRecordMap.AddRenameRecord(eventDef, eventDef.FullName, oldName, newName); + _renameRecordMap.AddRename(eventDef, newName); eventDef.Name = newName; } @@ -743,7 +711,7 @@ namespace Obfuz } } } - _renameRecordMap.AddRenameRecord(property, property.FullName, oldName, newName); + _renameRecordMap.AddRename(property, newName); property.Name = newName; } diff --git a/Editor/TypeSigUtil.cs b/Editor/TypeSigUtil.cs index ec65b36..5240697 100644 --- a/Editor/TypeSigUtil.cs +++ b/Editor/TypeSigUtil.cs @@ -101,7 +101,10 @@ namespace Obfuz { var valueOrClassType = type.ToClassOrValueTypeSig(); var typeDef = valueOrClassType.ToTypeDefOrRef().ResolveTypeDefThrow(); - result.Append($"[{typeDef.Module.Assembly.Name}]"); + if (typeDef.Module.IsCoreLibraryModule != true) + { + result.Append($"[{typeDef.Module.Assembly.Name}]"); + } result.Append(typeDef.FullName); break; }