重构 RenameRecordMap

backup
walon 2025-04-16 13:34:53 +08:00
parent caf7cbe040
commit def8fb168c
3 changed files with 118 additions and 209 deletions

View File

@ -118,13 +118,69 @@ namespace Obfuz
oldName = name, oldName = name,
newName = null, newName = null,
}); });
_modRenames.Add(mod, new RenameRecord foreach (TypeDef type in mod.GetTypes())
{
_typeRenames.Add(type, new RenameRecord
{ {
status = RenameStatus.NotRenamed, status = RenameStatus.NotRenamed,
signature = mod.Assembly.Name, signature = type.FullName,
oldName = mod.Assembly.Name, oldName = type.FullName,
newName = null, 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, signature = signature,
newName = newName, newName = newName,
status = System.Enum.Parse<RenameStatus>(ele.Attributes["status"].Value), status = RenameStatus.Renamed,
}; };
foreach (XmlNode node in ele.ChildNodes) foreach (XmlNode node in ele.ChildNodes)
{ {
@ -240,7 +296,7 @@ namespace Obfuz
{ {
index = int.Parse(index), index = int.Parse(index),
newName = newName, newName = newName,
status = System.Enum.Parse<RenameStatus>(ele.Attributes["status"].Value), status = RenameStatus.Renamed,
}; };
method.parameters.Add(rmp); method.parameters.Add(rmp);
} }
@ -253,7 +309,7 @@ namespace Obfuz
{ {
signature = signature, signature = signature,
newName = newName, newName = newName,
status = System.Enum.Parse<RenameStatus>(ele.Attributes["status"].Value), status = RenameStatus.Renamed,
}; };
type.fields.Add(signature, rmf); type.fields.Add(signature, rmf);
} }
@ -266,7 +322,7 @@ namespace Obfuz
{ {
signature = signature, signature = signature,
newName = newName, newName = newName,
status = System.Enum.Parse<RenameStatus>(ele.Attributes["status"].Value), status = RenameStatus.Renamed,
}; };
type.properties.Add(signature, rmp); type.properties.Add(signature, rmp);
} }
@ -279,7 +335,7 @@ namespace Obfuz
{ {
signature = signature, signature = signature,
newName = newName, newName = newName,
status = System.Enum.Parse<RenameStatus>(ele.Attributes["status"].Value), status = RenameStatus.Renamed,
}; };
type.events.Add(signature, rme); type.events.Add(signature, rme);
} }
@ -408,194 +464,76 @@ namespace Obfuz
methodEle.AppendChild(paramNode); methodEle.AppendChild(paramNode);
} }
public void AddRenameRecord(ModuleDefMD mod, string oldName, string newName) public void AddRename(ModuleDefMD mod, string newName)
{ {
_modRenames.Add(mod, new RenameRecord RenameRecord record = _modRenames[mod];
{ record.status = RenameStatus.Renamed;
status = RenameStatus.Renamed, record.newName = newName;
signature = oldName,
oldName = oldName,
newName = newName
});
} }
public void AddRenameRecord(TypeDef type, string oldName, string newName) public void AddRename(TypeDef type, string newName)
{ {
_typeRenames.Add(type, new RenameRecord RenameRecord record = _typeRenames[type];
{ record.status = RenameStatus.Renamed;
status = RenameStatus.Renamed, record.newName = newName;
signature = oldName,
oldName = oldName,
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 RenameRecord record = _methodRenames[method];
{ record.status = RenameStatus.Renamed;
status = RenameStatus.Renamed, record.newName = newName;
signature = signature,
oldName = oldName,
newName = newName
});
} }
public void AddRenameRecord(ParamDef paramDef, string oldName, string newName) public void AddRename(ParamDef paramDef, string newName)
{ {
_paramRenames.Add(paramDef, new RenameRecord RenameRecord record = _paramRenames[paramDef];
{ record.status = RenameStatus.Renamed;
status = RenameStatus.Renamed, record.newName = newName;
signature = oldName,
oldName = oldName,
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 _virtualMethodGroups.Add(methodGroup, new RenameRecord
{ {
status = RenameStatus.Renamed, status = RenameStatus.Renamed,
signature = signature, signature = methodRecord.signature,
oldName = oldName, oldName = methodRecord.oldName,
newName = newName 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)) if (_virtualMethodGroups.TryGetValue(group, out var record))
{ {
oldName = record.oldName;
newName = record.newName; newName = record.newName;
return true; return true;
} }
oldName = null;
newName = null; newName = null;
return false; 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 RenameRecord record = _fieldRenames[field];
{ record.status = RenameStatus.Renamed;
status = RenameStatus.Renamed, record.newName = newName;
signature = signature,
oldName = oldName,
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 RenameRecord record = _propertyRenames[property];
{ record.status = RenameStatus.Renamed;
status = RenameStatus.Renamed, record.newName = newName;
signature = signature,
oldName = oldName,
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 RenameRecord record = _eventRenames[eventDef];
{ record.status = RenameStatus.Renamed;
status = RenameStatus.Renamed, record.newName = newName;
signature = signature, }
oldName = oldName,
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,
});
}
} }
} }

View File

@ -118,6 +118,7 @@ namespace Obfuz
public void Process() public void Process()
{ {
_renameRecordMap.Init(_obfuzAssemblies);
RenameModules(); RenameModules();
RenameTypes(); RenameTypes();
RenameFields(); RenameFields();
@ -140,10 +141,6 @@ namespace Obfuz
{ {
Rename(ass.module); Rename(ass.module);
} }
else
{
_renameRecordMap.AddUnRenameRecord(ass.module);
}
} }
Debug.Log("Rename Modules end"); Debug.Log("Rename Modules end");
} }
@ -241,10 +238,6 @@ namespace Obfuz
{ {
Rename(type, _refTypeRefMetasMap.TryGetValue(type, out var typeDefMetas) ? typeDefMetas : null); 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); 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); Rename(method, refMethodMetasMap.TryGetValue(method, out var refMethodMetas) ? refMethodMetas : null);
} }
else
{
_renameRecordMap.AddUnRenameRecord(method);
}
} }
} }
} }
@ -449,21 +434,16 @@ namespace Obfuz
groupNeedRenames.Add(group, needRename); groupNeedRenames.Add(group, needRename);
if (needRename) if (needRename)
{ {
_renameRecordMap.AddRenameRecord(group, method.FullName, method.Name, _nameMaker.GetNewName(method, method.Name)); _renameRecordMap.InitAndAddRename(group, _nameMaker.GetNewName(method, method.Name));
}
else
{
_renameRecordMap.AddUnRenameRecord(group);
} }
} }
if (!needRename) if (!needRename)
{ {
_renameRecordMap.AddUnRenameRecord(method);
continue; 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 else
{ {
@ -538,10 +518,6 @@ namespace Obfuz
{ {
Rename(property, refPropertyMetasMap.TryGetValue(property, out var refPropertyMeta) ? refPropertyMeta : null); Rename(property, refPropertyMetasMap.TryGetValue(property, out var refPropertyMeta) ? refPropertyMeta : null);
} }
else
{
_renameRecordMap.AddUnRenameRecord(property);
}
} }
} }
} }
@ -561,10 +537,6 @@ namespace Obfuz
{ {
Rename(eventDef); Rename(eventDef);
} }
else
{
_renameRecordMap.AddUnRenameRecord(eventDef);
}
} }
} }
} }
@ -575,7 +547,7 @@ namespace Obfuz
{ {
string oldName = MetaUtil.GetModuleNameWithoutExt(mod.Name); string oldName = MetaUtil.GetModuleNameWithoutExt(mod.Name);
string newName = _nameMaker.GetNewName(mod, oldName); string newName = _nameMaker.GetNewName(mod, oldName);
_renameRecordMap.AddRenameRecord(mod, oldName, newName); _renameRecordMap.AddRename(mod, newName);
mod.Name = $"{newName}.dll"; mod.Name = $"{newName}.dll";
//Debug.Log($"rename module. oldName:{oldName} newName:{newName}"); //Debug.Log($"rename module. oldName:{oldName} newName:{newName}");
foreach (ObfuzAssemblyInfo ass in GetReferenceMeAssemblies(mod)) foreach (ObfuzAssemblyInfo ass in GetReferenceMeAssemblies(mod))
@ -626,7 +598,7 @@ namespace Obfuz
} }
type.Name = newName; type.Name = newName;
string newFullName = type.FullName; 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}"); //Debug.Log($"rename typedef. assembly:{type.Module.Name} oldName:{oldFullName} => newName:{newFullName}");
} }
@ -653,7 +625,7 @@ namespace Obfuz
} }
} }
//Debug.Log($"rename field. {field} => {newName}"); //Debug.Log($"rename field. {field} => {newName}");
_renameRecordMap.AddRenameRecord(field, field.FullName, oldName, newName); _renameRecordMap.AddRename(field, newName);
field.Name = newName; field.Name = newName;
} }
@ -662,10 +634,10 @@ namespace Obfuz
{ {
string oldName = method.Name; string oldName = method.Name;
string newName = _nameMaker.GetNewName(method, oldName); 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; ModuleDefMD mod = (ModuleDefMD)method.DeclaringType.Module;
@ -680,7 +652,7 @@ namespace Obfuz
//Debug.Log($"rename assembly:{memberRef.Module.Name} method:{oldMethodFullName} => {memberRef}"); //Debug.Log($"rename assembly:{memberRef.Module.Name} method:{oldMethodFullName} => {memberRef}");
} }
} }
_renameRecordMap.AddRenameRecord(method, method.FullName, oldName, newName); _renameRecordMap.AddRename(method, newName);
method.Name = newName; method.Name = newName;
} }
@ -708,20 +680,16 @@ namespace Obfuz
if (_renamePolicy.NeedRename(param)) if (_renamePolicy.NeedRename(param))
{ {
string newName = _nameMaker.GetNewName(param, param.Name); string newName = _nameMaker.GetNewName(param, param.Name);
_renameRecordMap.AddRenameRecord(param, param.Name, newName); _renameRecordMap.AddRename(param, newName);
param.Name = newName; param.Name = newName;
} }
else
{
_renameRecordMap.AddUnRenameRecord(param);
}
} }
private void Rename(EventDef eventDef) private void Rename(EventDef eventDef)
{ {
string oldName = eventDef.Name; string oldName = eventDef.Name;
string newName = _nameMaker.GetNewName(eventDef, eventDef.Name); string newName = _nameMaker.GetNewName(eventDef, eventDef.Name);
_renameRecordMap.AddRenameRecord(eventDef, eventDef.FullName, oldName, newName); _renameRecordMap.AddRename(eventDef, newName);
eventDef.Name = newName; eventDef.Name = newName;
} }
@ -743,7 +711,7 @@ namespace Obfuz
} }
} }
} }
_renameRecordMap.AddRenameRecord(property, property.FullName, oldName, newName); _renameRecordMap.AddRename(property, newName);
property.Name = newName; property.Name = newName;
} }

View File

@ -101,7 +101,10 @@ namespace Obfuz
{ {
var valueOrClassType = type.ToClassOrValueTypeSig(); var valueOrClassType = type.ToClassOrValueTypeSig();
var typeDef = valueOrClassType.ToTypeDefOrRef().ResolveTypeDefThrow(); var typeDef = valueOrClassType.ToTypeDefOrRef().ResolveTypeDefThrow();
if (typeDef.Module.IsCoreLibraryModule != true)
{
result.Append($"[{typeDef.Module.Assembly.Name}]"); result.Append($"[{typeDef.Module.Assembly.Name}]");
}
result.Append(typeDef.FullName); result.Append(typeDef.FullName);
break; break;
} }