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