符号混淆中method和field名全局唯一,方便还原混淆符号
parent
fea2e65075
commit
75a4e2cdad
|
@ -12,6 +12,8 @@ namespace Obfuz.ObfusPasses.SymbolObfus.NameMakers
|
|||
|
||||
private readonly object _namespaceScope = new object();
|
||||
private readonly object _typeNameScope = new object();
|
||||
private readonly object _methodNameScope = new object();
|
||||
private readonly object _fieldNameScope = new object();
|
||||
|
||||
protected abstract INameScope CreateNameScope();
|
||||
|
||||
|
@ -32,12 +34,12 @@ namespace Obfuz.ObfusPasses.SymbolObfus.NameMakers
|
|||
|
||||
public void AddPreservedName(MethodDef methodDef, string name)
|
||||
{
|
||||
GetNameScope(methodDef.DeclaringType).AddPreservedName(name);
|
||||
GetNameScope(_methodNameScope).AddPreservedName(name);
|
||||
}
|
||||
|
||||
public void AddPreservedName(FieldDef fieldDef, string name)
|
||||
{
|
||||
GetNameScope(fieldDef.DeclaringType).AddPreservedName(name);
|
||||
GetNameScope(_fieldNameScope).AddPreservedName(name);
|
||||
}
|
||||
|
||||
public void AddPreservedName(PropertyDef propertyDef, string name)
|
||||
|
@ -57,7 +59,8 @@ namespace Obfuz.ObfusPasses.SymbolObfus.NameMakers
|
|||
|
||||
public bool IsNamePreserved(VirtualMethodGroup virtualMethodGroup, string name)
|
||||
{
|
||||
return virtualMethodGroup.GetNameConflictTypeScopes().Any(m => GetNameScope(m).IsNamePreserved(name));
|
||||
var scope = GetNameScope(_methodNameScope);
|
||||
return scope.IsNamePreserved(name);
|
||||
}
|
||||
|
||||
private string GetDefaultNewName(object scope, string originName)
|
||||
|
@ -82,28 +85,13 @@ namespace Obfuz.ObfusPasses.SymbolObfus.NameMakers
|
|||
public string GetNewName(MethodDef methodDef, string originalName)
|
||||
{
|
||||
Assert.IsFalse(methodDef.IsVirtual);
|
||||
return GetDefaultNewName(methodDef.DeclaringType, originalName);
|
||||
return GetDefaultNewName(_methodNameScope, originalName);
|
||||
}
|
||||
|
||||
public string GetNewName(VirtualMethodGroup virtualMethodGroup, string originalName)
|
||||
{
|
||||
var scope = GetNameScope(virtualMethodGroup);
|
||||
while (true)
|
||||
{
|
||||
string newName = scope.GetNewName(originalName, false);
|
||||
if (virtualMethodGroup.GetNameConflictTypeScopes().Any(s => GetNameScope(s).IsNamePreserved(newName)))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach (var s in virtualMethodGroup.GetNameDeclaringTypeScopes())
|
||||
{
|
||||
GetNameScope(s).AddPreservedName(newName);
|
||||
}
|
||||
return newName;
|
||||
}
|
||||
}
|
||||
var scope = GetNameScope(_methodNameScope);
|
||||
return scope.GetNewName(originalName, false);
|
||||
}
|
||||
|
||||
public virtual string GetNewName(ParamDef param, string originalName)
|
||||
|
@ -113,7 +101,7 @@ namespace Obfuz.ObfusPasses.SymbolObfus.NameMakers
|
|||
|
||||
public string GetNewName(FieldDef fieldDef, string originalName)
|
||||
{
|
||||
return GetDefaultNewName(fieldDef.DeclaringType, originalName);
|
||||
return GetDefaultNewName(_fieldNameScope, originalName);
|
||||
}
|
||||
|
||||
public string GetNewName(PropertyDef propertyDef, string originalName)
|
||||
|
|
Loading…
Reference in New Issue