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