修复rename Custom中枚举类型的bug
parent
b3ccb26003
commit
8b082a0905
|
@ -24,7 +24,7 @@ namespace Obfuz
|
||||||
_assemblyPathResolver = assemblyResolver;
|
_assemblyPathResolver = assemblyResolver;
|
||||||
_modCtx = ModuleDef.CreateModuleContext();
|
_modCtx = ModuleDef.CreateModuleContext();
|
||||||
_asmResolver = (AssemblyResolver)_modCtx.AssemblyResolver;
|
_asmResolver = (AssemblyResolver)_modCtx.AssemblyResolver;
|
||||||
_asmResolver.EnableTypeDefCache = true;
|
_asmResolver.EnableTypeDefCache = false;
|
||||||
_asmResolver.UseGAC = false;
|
_asmResolver.UseGAC = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -67,7 +67,7 @@ namespace Obfuz
|
||||||
{
|
{
|
||||||
//Debug.Log($"do load module:{dllPath}");
|
//Debug.Log($"do load module:{dllPath}");
|
||||||
ModuleDefMD mod = ModuleDefMD.Load(File.ReadAllBytes(dllPath), _modCtx);
|
ModuleDefMD mod = ModuleDefMD.Load(File.ReadAllBytes(dllPath), _modCtx);
|
||||||
//mod.EnableTypeDefFindCache = true;
|
mod.EnableTypeDefFindCache = false;
|
||||||
_asmResolver.AddToCache(mod);
|
_asmResolver.AddToCache(mod);
|
||||||
return mod;
|
return mod;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
{
|
{
|
||||||
"name": "Obfuz.Editor",
|
"name": "Obfuz.Editor",
|
||||||
"rootNamespace": "",
|
"rootNamespace": "",
|
||||||
"references": [],
|
"references": [
|
||||||
|
"GUID:167b4b7f91c16bb4183f7298af665076"
|
||||||
|
],
|
||||||
"includePlatforms": [
|
"includePlatforms": [
|
||||||
"Editor"
|
"Editor"
|
||||||
],
|
],
|
||||||
|
|
|
@ -380,6 +380,7 @@ namespace Obfuz
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
string typeName = oldValue.GetType().FullName;
|
||||||
if (oldValue.GetType().IsPrimitive)
|
if (oldValue.GetType().IsPrimitive)
|
||||||
{
|
{
|
||||||
return oldValue;
|
return oldValue;
|
||||||
|
@ -436,6 +437,23 @@ namespace Obfuz
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private bool TryRenameArgument(ModuleDefMD mod, string oldFullName, CANamedArgument oldArg)
|
||||||
|
{
|
||||||
|
bool anyChange = false;
|
||||||
|
TypeSig newType = RenameTypeSig(oldArg.Type, mod, oldFullName);
|
||||||
|
if (newType != oldArg.Type)
|
||||||
|
{
|
||||||
|
anyChange = true;
|
||||||
|
oldArg.Type = newType;
|
||||||
|
}
|
||||||
|
if (TryRenameArgument(mod, oldFullName, oldArg.Argument, out var newArg))
|
||||||
|
{
|
||||||
|
oldArg.Argument = newArg;
|
||||||
|
anyChange = true;
|
||||||
|
}
|
||||||
|
return anyChange;
|
||||||
|
}
|
||||||
|
|
||||||
private void RenameTypeRefInCustomAttribute(ModuleDefMD referenceMeMod, ModuleDefMD mod, TypeDef typeDef, string oldFullName)
|
private void RenameTypeRefInCustomAttribute(ModuleDefMD referenceMeMod, ModuleDefMD mod, TypeDef typeDef, string oldFullName)
|
||||||
{
|
{
|
||||||
List<CustomAttributeInfo> customAttributes = _customAttributeArgumentsWithTypeByMods[referenceMeMod];
|
List<CustomAttributeInfo> customAttributes = _customAttributeArgumentsWithTypeByMods[referenceMeMod];
|
||||||
|
@ -460,10 +478,36 @@ namespace Obfuz
|
||||||
for (int i = 0; i < cai.namedArguments.Count; i++)
|
for (int i = 0; i < cai.namedArguments.Count; i++)
|
||||||
{
|
{
|
||||||
CANamedArgument oldArg = cai.namedArguments[i];
|
CANamedArgument oldArg = cai.namedArguments[i];
|
||||||
if (TryRenameArgument(mod, oldFullName, oldArg.Argument, out var newArg))
|
if (TryRenameArgument(mod, oldFullName, oldArg))
|
||||||
{
|
{
|
||||||
anyChange = true;
|
anyChange = true;
|
||||||
oldArg.Argument = newArg;
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (anyChange)
|
||||||
|
{
|
||||||
|
cai.customAttributes[cai.index] = new CustomAttribute(oldAttr.Constructor,
|
||||||
|
cai.arguments != null ? cai.arguments : oldAttr.ConstructorArguments,
|
||||||
|
cai.namedArguments != null ? cai.namedArguments : oldAttr.NamedArguments);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void RenameFieldNameInCustomAttributes(ModuleDefMD referenceMeMod, ModuleDefMD mod, string oldFieldOrPropertyName, string newName)
|
||||||
|
{
|
||||||
|
List<CustomAttributeInfo> customAttributes = _customAttributeArgumentsWithTypeByMods[referenceMeMod];
|
||||||
|
foreach (CustomAttributeInfo cai in customAttributes)
|
||||||
|
{
|
||||||
|
CustomAttribute oldAttr = cai.customAttributes[cai.index];
|
||||||
|
bool anyChange = false;
|
||||||
|
if (cai.namedArguments != null)
|
||||||
|
{
|
||||||
|
foreach (CANamedArgument arg in cai.namedArguments)
|
||||||
|
{
|
||||||
|
if (arg.Name == oldFieldOrPropertyName)
|
||||||
|
{
|
||||||
|
anyChange = true;
|
||||||
|
arg.Name = newName;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -528,8 +572,12 @@ namespace Obfuz
|
||||||
|
|
||||||
Debug.Log($"rename assembly:{ass.name} field:{oldFieldFullName} => {memberRef}");
|
Debug.Log($"rename assembly:{ass.name} field:{oldFieldFullName} => {memberRef}");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RenameFieldNameInCustomAttributes(ass.module, (ModuleDefMD)field.DeclaringType.Module, field.Name, newName);
|
||||||
}
|
}
|
||||||
field.Name = newName;
|
field.Name = newName;
|
||||||
|
|
||||||
|
|
||||||
Debug.Log($"rename field. {field} => {newName}");
|
Debug.Log($"rename field. {field} => {newName}");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -549,7 +597,14 @@ namespace Obfuz
|
||||||
|
|
||||||
private void Rename(PropertyDef property)
|
private void Rename(PropertyDef property)
|
||||||
{
|
{
|
||||||
property.Name = _nameMaker.GetNewName(property, property.Name);
|
string oldName = property.Name;
|
||||||
|
string newName = _nameMaker.GetNewName(property, oldName);
|
||||||
|
property.Name = newName;
|
||||||
|
ModuleDefMD mod = (ModuleDefMD)property.DeclaringType.Module;
|
||||||
|
foreach (ObfuzAssemblyInfo ass in GetReferenceMeAssemblies(mod))
|
||||||
|
{
|
||||||
|
RenameFieldNameInCustomAttributes(ass.module, mod, oldName, newName);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue