修复 VirtualMethodGroupCalculator没有考虑到某个类本身没有实现它的接口类的某个函数但它的父类实现了它的接口类的该函数时没有将接口的该函数和父类的该虚函数计算为一个Group的bug
parent
48f1dfe64a
commit
b2d7637438
|
@ -61,6 +61,7 @@ namespace Obfuz.ObfusPasses.SymbolObfus
|
|||
|
||||
var typeMethods = new TypeFlatMethods();
|
||||
|
||||
var interfaceMethods = new List<MethodDef>();
|
||||
if (typeDef.BaseType != null)
|
||||
{
|
||||
TypeDef baseTypeDef = MetaUtil.GetTypeDefOrGenericTypeBaseThrowException(typeDef.BaseType);
|
||||
|
@ -70,10 +71,30 @@ namespace Obfuz.ObfusPasses.SymbolObfus
|
|||
{
|
||||
TypeDef intfTypeDef = MetaUtil.GetTypeDefOrGenericTypeBaseThrowException(intfType.Interface);
|
||||
CalculateType(intfTypeDef);
|
||||
typeMethods.flatMethods.AddRange(_visitedTypes[intfTypeDef].flatMethods);
|
||||
//typeMethods.flatMethods.AddRange(_visitedTypes[intfTypeDef].flatMethods);
|
||||
interfaceMethods.AddRange(_visitedTypes[intfTypeDef].flatMethods);
|
||||
}
|
||||
}
|
||||
foreach (var method in typeDef.Methods)
|
||||
foreach (MethodDef method in interfaceMethods)
|
||||
{
|
||||
if (typeMethods.TryFindMatchVirtualMethod(method, out var matchMethodDef))
|
||||
{
|
||||
// merge group
|
||||
var group = _methodGroups[matchMethodDef];
|
||||
var matchGroup = _methodGroups[method];
|
||||
if (group != matchGroup)
|
||||
{
|
||||
foreach (var m in matchGroup.methods)
|
||||
{
|
||||
group.methods.Add(m);
|
||||
_methodGroups[m] = group;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
typeMethods.flatMethods.AddRange(interfaceMethods);
|
||||
foreach (MethodDef method in typeDef.Methods)
|
||||
{
|
||||
if (!method.IsVirtual)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue