Update detection of invalid types when restoring field/method arg types

This commit is contained in:
de4dot 2011-12-04 20:01:02 +01:00
parent 427abbce79
commit b2801872d7

View File

@ -708,24 +708,32 @@ namespace de4dot.deobfuscators {
if (MemberReferenceHelper.verifyType(type, "mscorlib", "System.Void")) if (MemberReferenceHelper.verifyType(type, "mscorlib", "System.Void"))
return false; return false;
switch (MemberReferenceHelper.getMemberReferenceType(type)) { while (type != null) {
case CecilType.ArrayType: switch (MemberReferenceHelper.getMemberReferenceType(type)) {
case CecilType.GenericInstanceType: case CecilType.ArrayType:
case CecilType.PointerType: case CecilType.GenericInstanceType:
case CecilType.TypeDefinition: case CecilType.PointerType:
case CecilType.TypeReference: case CecilType.TypeDefinition:
return true; case CecilType.TypeReference:
break;
case CecilType.ByReferenceType: case CecilType.ByReferenceType:
case CecilType.FunctionPointerType: case CecilType.FunctionPointerType:
case CecilType.GenericParameter: case CecilType.GenericParameter:
case CecilType.OptionalModifierType: case CecilType.OptionalModifierType:
case CecilType.PinnedType: case CecilType.PinnedType:
case CecilType.RequiredModifierType: case CecilType.RequiredModifierType:
case CecilType.SentinelType: case CecilType.SentinelType:
default: default:
return false; return false;
}
if (!(type is TypeSpecification))
break;
type = ((TypeSpecification)type).ElementType;
} }
return type != null;
} }
static TypeReference getCommonBaseClass(ModuleDefinition module, TypeReference a, TypeReference b) { static TypeReference getCommonBaseClass(ModuleDefinition module, TypeReference a, TypeReference b) {