Esempio n. 1
0
        // Get generic arguments from either a type or method instanceIndex from a MethodSpec
        public TypeInfo[] ResolveGenericArguments(Il2CppGenericInst inst)
        {
            // Get list of pointers to type parameters (both unresolved and concrete)
            var genericTypeArguments = Package.BinaryImage.ReadMappedWordArray(inst.type_argv, (int)inst.type_argc);

            return(genericTypeArguments.Select(a => GetTypeFromVirtualAddress((ulong)a)).ToArray());
        }
Esempio n. 2
0
        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
        internal static Il2CppTypeReflectionData[]? GetGenericTypeParams(Il2CppGenericInst genericInst)
        {
            if (LibCpp2IlMain.ThePe == null || LibCpp2IlMain.TheMetadata == null)
            {
                return(null);
            }

            var types    = new List <Il2CppTypeReflectionData>();
            var pointers = LibCpp2IlMain.ThePe.ReadClassArrayAtVirtualAddress <ulong>(genericInst.pointerStart, (long)genericInst.pointerCount);

            for (uint i = 0; i < genericInst.pointerCount; ++i)
            {
                var oriType = LibCpp2IlMain.ThePe.GetIl2CppTypeFromPointer(pointers[i]);
                types.Add(GetTypeReflectionData(oriType) !);
            }

            return(types.ToArray());
        }
Esempio n. 4
0
        internal static string GetGenericTypeParams(Il2CppMetadata metadata, PE.PE cppAssembly, Il2CppGenericInst genericInst)
        {
            var typeNames = new List <string>();
            var pointers  = cppAssembly.ReadClassArrayAtVirtualAddress <ulong>(genericInst.type_argv, (long)genericInst.type_argc);

            for (uint i = 0; i < genericInst.type_argc; ++i)
            {
                var oriType = cppAssembly.GetIl2CppType(pointers[i]);
                typeNames.Add(GetTypeName(metadata, cppAssembly, oriType));
            }

            return($"<{String.Join(", ", typeNames)}>");
        }