Esempio n. 1
0
        public string GetGenericInstParams(Il2CppGenericInst genericInst)
        {
            var genericParameterNames = new List <string>();
            var pointers = il2Cpp.MapVATR <ulong>(genericInst.type_argv, genericInst.type_argc);

            for (int i = 0; i < genericInst.type_argc; i++)
            {
                var il2CppType = il2Cpp.GetIl2CppType(pointers[i]);
                genericParameterNames.Add(GetTypeName(il2CppType, false, false));
            }
            return($"<{string.Join(", ", genericParameterNames)}>");
        }
        private static string GetGenericTypeParams(Il2CppGenericInst genericInst)
        {
            var typeNames = new List <string>();
            var pointers  = il2cpp.GetPointers(genericInst.type_argv, (long)genericInst.type_argc);

            for (uint i = 0; i < genericInst.type_argc; ++i)
            {
                var oriType = il2cpp.GetIl2CppType(pointers[i]);
                typeNames.Add(GetTypeName(oriType));
            }
            return($"<{string.Join(", ", typeNames)}>");
        }
Esempio n. 3
0
        public Il2CppType[] GetGenericInstParamList(Il2CppGenericInst genericInst)
        {
            var genericParameterTypes = new Il2CppType[genericInst.type_argc];
            var pointers = il2Cpp.MapVATR <ulong>(genericInst.type_argv, genericInst.type_argc);

            for (int i = 0; i < genericInst.type_argc; i++)
            {
                var il2CppType = il2Cpp.GetIl2CppType(pointers[i]);
                genericParameterTypes[i] = il2CppType;
            }
            return(genericParameterTypes);
        }
        public string GetGenericInstParams(Il2CppGenericInst genericInst)
        {
            var typeNames = new List <string>();
            var pointers  = il2Cpp.MapVATR <ulong>(genericInst.type_argv, genericInst.type_argc);

            for (uint i = 0; i < genericInst.type_argc; ++i)
            {
                var oriType = il2Cpp.GetIl2CppType(pointers[i]);
                typeNames.Add(GetTypeName(oriType, false, true));
            }
            return($"<{string.Join(", ", typeNames)}>");
        }
Esempio n. 5
0
        private static string get_type_name(Il2CppType pType)
        {
            string ret;

            if (pType.type == Il2CppTypeEnum.IL2CPP_TYPE_CLASS || pType.type == Il2CppTypeEnum.IL2CPP_TYPE_VALUETYPE)
            {
                Il2CppTypeDefinition klass = metadata.typeDefs[pType.data.klassIndex];
                ret = metadata.GetString(klass.nameIndex);
            }
            else if (pType.type == Il2CppTypeEnum.IL2CPP_TYPE_GENERICINST)
            {
                Il2CppGenericClass   generic_class = il2cpp.MapVATR <Il2CppGenericClass>(pType.data.generic_class);
                Il2CppTypeDefinition pMainDef      = metadata.typeDefs[generic_class.typeDefinitionIndex];
                ret = metadata.GetString(pMainDef.nameIndex);
                var typeNames           = new List <string>();
                Il2CppGenericInst pInst = il2cpp.MapVATR <Il2CppGenericInst>(generic_class.context.class_inst);
                var pointers            = il2cpp.MapVATR <uint>(pInst.type_argv, (int)pInst.type_argc);
                for (int i = 0; i < pInst.type_argc; ++i)
                {
                    var pOriType = il2cpp.MapVATR <Il2CppType>(pointers[i]);
                    pOriType.Init();
                    typeNames.Add(get_type_name(pOriType));
                }
                ret += $"<{string.Join(", ", typeNames)}>";
            }
            else if (pType.type == Il2CppTypeEnum.IL2CPP_TYPE_ARRAY)
            {
                Il2CppArrayType arrayType = il2cpp.MapVATR <Il2CppArrayType>(pType.data.array);
                var             type      = il2cpp.MapVATR <Il2CppType>(arrayType.etype);
                type.Init();
                ret = $"{get_type_name(type)}[]";
            }
            else if (pType.type == Il2CppTypeEnum.IL2CPP_TYPE_SZARRAY)
            {
                var type = il2cpp.MapVATR <Il2CppType>(pType.data.type);
                type.Init();
                ret = $"{get_type_name(type)}[]";
            }
            else
            {
                if ((int)pType.type >= szTypeString.Length)
                {
                    ret = "unknow";
                }
                else
                {
                    ret = szTypeString[(int)pType.type];
                }
            }
            return(ret);
        }
Esempio n. 6
0
 public string GetGenericInstParams(Il2CppGenericInst genericInst)
 {
     if (!GenericInstParamsCache.TryGetValue(genericInst, out var value))
     {
         var typeNames = new List <string>();
         var pointers  = il2Cpp.MapVATR <ulong>(genericInst.type_argv, genericInst.type_argc);
         for (uint i = 0; i < genericInst.type_argc; ++i)
         {
             var oriType = il2Cpp.GetIl2CppType(pointers[i]);
             typeNames.Add(GetTypeName(oriType, false, false));
         }
         value = $"<{string.Join(", ", typeNames)}>";
         GenericInstParamsCache.Add(genericInst, value);
     }
     return(value);
 }