MetaUtil.ToShareTypeSig 对于泛型类型不共享

backup
walon 2025-04-29 10:05:35 +08:00
parent a48dad21bc
commit 440b0509c2
1 changed files with 16 additions and 15 deletions

View File

@ -650,22 +650,23 @@ namespace Obfuz.Utils
case ElementType.Class: return corTypes.Object; case ElementType.Class: return corTypes.Object;
case ElementType.GenericInst: case ElementType.GenericInst:
{ {
// il2cpp will raise error when try to share generic value type
return typeSig; return typeSig;
var gia = (GenericInstSig)a; //var gia = (GenericInstSig)a;
TypeDef typeDef = gia.GenericType.ToTypeDefOrRef().ResolveTypeDef(); //TypeDef typeDef = gia.GenericType.ToTypeDefOrRef().ResolveTypeDef();
if (typeDef == null) //if (typeDef == null)
{ //{
throw new Exception($"type:{a} definition could not be found"); // throw new Exception($"type:{a} definition could not be found");
} //}
if (typeDef.IsEnum) //if (typeDef.IsEnum)
{ //{
return ToShareTypeSig(corTypes, typeDef.GetEnumUnderlyingType()); // return ToShareTypeSig(corTypes, typeDef.GetEnumUnderlyingType());
} //}
if (!typeDef.IsValueType) //if (!typeDef.IsValueType)
{ //{
return corTypes.Object; // return corTypes.Object;
} //}
return new GenericInstSig(gia.GenericType, gia.GenericArguments.Select(ga => ToShareTypeSig(corTypes, ga)).ToList()); //return new GenericInstSig(gia.GenericType, gia.GenericArguments.Select(ga => ToShareTypeSig(corTypes, ga)).ToList());
} }
case ElementType.FnPtr: return corTypes.UIntPtr; case ElementType.FnPtr: return corTypes.UIntPtr;
case ElementType.ValueArray: return typeSig; case ElementType.ValueArray: return typeSig;