From 5f4083066be2c9f10324e6e5b663ae3b143080bf Mon Sep 17 00:00:00 2001 From: walon Date: Fri, 23 May 2025 19:48:55 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=BB=99=E8=99=9A=E5=87=BD?= =?UTF-8?q?=E6=95=B0=E5=88=86=E9=85=8D=E5=90=8D=E5=AD=97=E6=97=B6=E6=9C=AA?= =?UTF-8?q?=E8=80=83=E8=99=91=E5=88=B0=E4=B8=8D=E8=A6=81=E4=B8=8E=E6=AF=8F?= =?UTF-8?q?=E4=B8=AA=E8=99=9A=E5=87=BD=E6=95=B0=E6=89=80=E5=9C=A8=E5=91=BD?= =?UTF-8?q?=E5=90=8D=E7=A9=BA=E9=97=B4=E4=B8=8D=E5=86=B2=E7=AA=81=E7=9A=84?= =?UTF-8?q?bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ObfusPasses/SymbolObfus/INameMaker.cs | 2 ++ .../SymbolObfus/NameMakers/INameScope.cs | 4 ++- .../SymbolObfus/NameMakers/NameMakerBase.cs | 25 ++++++++++++++++++- .../SymbolObfus/NameMakers/NameScopeBase.cs | 10 ++++++-- 4 files changed, 37 insertions(+), 4 deletions(-) diff --git a/com.code-philosophy.obfuz/Editor/ObfusPasses/SymbolObfus/INameMaker.cs b/com.code-philosophy.obfuz/Editor/ObfusPasses/SymbolObfus/INameMaker.cs index 184ce1b..9e94125 100644 --- a/com.code-philosophy.obfuz/Editor/ObfusPasses/SymbolObfus/INameMaker.cs +++ b/com.code-philosophy.obfuz/Editor/ObfusPasses/SymbolObfus/INameMaker.cs @@ -22,6 +22,8 @@ namespace Obfuz.ObfusPasses.SymbolObfus string GetNewName(MethodDef methodDef, string originalName); + string GetNewName(VirtualMethodGroup virtualMethodGroup, string originalName); + string GetNewName(ParamDef param, string originalName); string GetNewName(FieldDef fieldDef, string originalName); diff --git a/com.code-philosophy.obfuz/Editor/ObfusPasses/SymbolObfus/NameMakers/INameScope.cs b/com.code-philosophy.obfuz/Editor/ObfusPasses/SymbolObfus/NameMakers/INameScope.cs index 9fb5a98..c6ca426 100644 --- a/com.code-philosophy.obfuz/Editor/ObfusPasses/SymbolObfus/NameMakers/INameScope.cs +++ b/com.code-philosophy.obfuz/Editor/ObfusPasses/SymbolObfus/NameMakers/INameScope.cs @@ -2,7 +2,9 @@ { public interface INameScope { - void AddPreservedName(string name); + bool AddPreservedName(string name); + + bool IsNamePreserved(string name); string GetNewName(string originalName, bool reuse); } diff --git a/com.code-philosophy.obfuz/Editor/ObfusPasses/SymbolObfus/NameMakers/NameMakerBase.cs b/com.code-philosophy.obfuz/Editor/ObfusPasses/SymbolObfus/NameMakers/NameMakerBase.cs index 157aeab..bd1bb08 100644 --- a/com.code-philosophy.obfuz/Editor/ObfusPasses/SymbolObfus/NameMakers/NameMakerBase.cs +++ b/com.code-philosophy.obfuz/Editor/ObfusPasses/SymbolObfus/NameMakers/NameMakerBase.cs @@ -4,6 +4,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using UnityEngine.Assertions; namespace Obfuz.ObfusPasses.SymbolObfus.NameMakers { @@ -77,7 +78,29 @@ namespace Obfuz.ObfusPasses.SymbolObfus.NameMakers public string GetNewName(MethodDef methodDef, string originalName) { - return (methodDef.IsVirtual ? ">" : "") + GetDefaultNewName(methodDef.DeclaringType, originalName); + Assert.IsFalse(methodDef.IsVirtual); + return GetDefaultNewName(methodDef.DeclaringType, originalName); + } + + public string GetNewName(VirtualMethodGroup virtualMethodGroup, string originalName) + { + var scope = GetNameScope(virtualMethodGroup); + while (true) + { + string newName = scope.GetNewName(originalName, false); + if (virtualMethodGroup.methods.Any(m => GetNameScope(m).IsNamePreserved(newName))) + { + continue; + } + else + { + foreach (var method in virtualMethodGroup.methods) + { + GetNameScope(method).AddPreservedName(newName); + } + return newName; + } + } } public virtual string GetNewName(ParamDef param, string originalName) diff --git a/com.code-philosophy.obfuz/Editor/ObfusPasses/SymbolObfus/NameMakers/NameScopeBase.cs b/com.code-philosophy.obfuz/Editor/ObfusPasses/SymbolObfus/NameMakers/NameScopeBase.cs index 4f3d213..daa8cc8 100644 --- a/com.code-philosophy.obfuz/Editor/ObfusPasses/SymbolObfus/NameMakers/NameScopeBase.cs +++ b/com.code-philosophy.obfuz/Editor/ObfusPasses/SymbolObfus/NameMakers/NameScopeBase.cs @@ -11,12 +11,18 @@ namespace Obfuz.ObfusPasses.SymbolObfus.NameMakers private readonly HashSet _preservedNames = new HashSet(); - public void AddPreservedName(string name) + public bool AddPreservedName(string name) { if (!string.IsNullOrEmpty(name)) { - _preservedNames.Add(name); + return _preservedNames.Add(name); } + return false; + } + + public bool IsNamePreserved(string name) + { + return _preservedNames.Contains(name); }