Exemplo n.º 1
0
        internal override void Configure(long codeRegistration, long metadataRegistration)
        {
            var ptrCodeReg     = Image.ReadMappedObject <Il2CppCodeRegistration64>(codeRegistration);
            var ptrMetadataReg = Image.ReadMappedObject <Il2CppMetadataRegistration64>(metadataRegistration);

            var methodPointers = Image.ReadMappedArray <ulong>((long)ptrCodeReg.pmethodPointers, (int)ptrCodeReg.methodPointersCount);

            MethodPointers = methodPointers.Select(p => (long)p).ToArray();

            var customAttributes = Image.ReadMappedArray <ulong>((long)ptrCodeReg.customAttributeGenerators, (int)ptrCodeReg.customAttributeCount);

            CustomAttributes = customAttributes.Select(p => (long)p).ToArray();

            //ptrMetadataReg.fieldOffsets = Image.ReadMappedArray<long>((long)ptrMetadataReg.pfieldOffsets, (int)ptrMetadataReg.fieldOffsetsCount);

            var ptrs  = Image.ReadMappedArray <ulong>((long)ptrMetadataReg.ptypes, (int)ptrMetadataReg.typesCount);
            var types = ptrs.Select(p => (long)p).ToArray();

            Types = new GenericIl2CppType[ptrMetadataReg.typesCount];
            for (var i = 0; i < ptrMetadataReg.typesCount; ++i)
            {
                var pType = Image.ReadMappedObject <Il2CppType64>(types[i]);
                pType.Init();
                Types[i] = new GenericIl2CppType(pType);
            }
        }
Exemplo n.º 2
0
        internal virtual void Configure(long codeRegistration, long metadataRegistration)
        {
            var PtrCodeRegistration     = Image.ReadMappedObject <Il2CppCodeRegistration>(codeRegistration);
            var PtrMetadataRegistration = Image.ReadMappedObject <Il2CppMetadataRegistration>(metadataRegistration);

            var methodPointers = Image.ReadMappedArray <uint>(PtrCodeRegistration.pmethodPointers, (int)PtrCodeRegistration.methodPointersCount);

            MethodPointers = methodPointers.Select(p => (long)p).ToArray();

            //PtrMetadataRegistration.fieldOffsets = Image.ReadMappedArray<int>(PtrMetadataRegistration.pfieldOffsets,
            //    PtrMetadataRegistration.fieldOffsetsCount);

            long[] types;
            if (Image.Is64bits)
            {
                var ptrs = Image.ReadMappedArray <ulong>(PtrMetadataRegistration.ptypes, PtrMetadataRegistration.typesCount);
                types = ptrs.Select(p => (long)p).ToArray();
            }
            else
            {
                var ptrs = Image.ReadMappedArray <uint>(PtrMetadataRegistration.ptypes, PtrMetadataRegistration.typesCount);
                types = ptrs.Select(p => (long)p).ToArray();
            }

            Types = new GenericIl2CppType[PtrMetadataRegistration.typesCount];
            for (int i = 0; i < PtrMetadataRegistration.typesCount; ++i)
            {
                var pType = Image.ReadMappedObject <Il2CppType>(types[i]);
                pType.Init();
                Types[i] = new GenericIl2CppType(pType);
            }
        }
Exemplo n.º 3
0
 private void AddTypeToDump(GenericIl2CppType pType)
 {
     if (!typesToDump.Any(t => t.klassIndex == pType.klassIndex))
     {
         typesToDump.Add(pType);
     }
 }
        internal virtual void Configure(long codeRegistration, long metadataRegistration)
        {
            var PtrCodeRegistration     = Image.ReadMappedObject <Il2CppCodeRegistration>(codeRegistration);
            var PtrMetadataRegistration = Image.ReadMappedObject <Il2CppMetadataRegistration>(metadataRegistration);

            var methodPointers = Image.ReadMappedArray <uint>(PtrCodeRegistration.pmethodPointers, (int)PtrCodeRegistration.methodPointersCount);

            MethodPointers = methodPointers.Select(p => (long)p).ToArray();

            var invokers = Image.ReadMappedArray <uint>(PtrCodeRegistration.invokerPointers, (int)PtrCodeRegistration.invokerPointersCount);

            Invokers = invokers.Select(p => (long)p).ToArray();

            var managedToNative = Image.ReadMappedArray <uint>(PtrCodeRegistration.delegateWrappersFromManagedToNative, (int)PtrCodeRegistration.delegateWrappersFromManagedToNativeCount);

            ManagedToNative = managedToNative.Select(p => (long)p).ToArray();

            var customAttributes = Image.ReadMappedArray <uint>(PtrCodeRegistration.customAttributeGenerators, PtrCodeRegistration.customAttributeCount);

            CustomAttributes = customAttributes.Select(p => (long)p).ToArray();

            //PtrMetadataRegistration.fieldOffsets = Image.ReadMappedArray<int>(PtrMetadataRegistration.pfieldOffsets,
            //    PtrMetadataRegistration.fieldOffsetsCount);

            long[] types;
            if (Image.Is64bits)
            {
                var ptrs = Image.ReadMappedArray <ulong>(PtrMetadataRegistration.ptypes, PtrMetadataRegistration.typesCount);
                types = ptrs.Select(p => (long)p).ToArray();
            }
            else
            {
                var ptrs = Image.ReadMappedArray <uint>(PtrMetadataRegistration.ptypes, PtrMetadataRegistration.typesCount);
                types = ptrs.Select(p => (long)p).ToArray();
            }

            Types = new GenericIl2CppType[PtrMetadataRegistration.typesCount];
            for (int i = 0; i < PtrMetadataRegistration.typesCount; ++i)
            {
                var pType = Image.ReadMappedObject <Il2CppType>(types[i]);
                pType.Init();
                Types[i] = new GenericIl2CppType(pType);
            }
        }
Exemplo n.º 5
0
 public GenericIl2CppType GetTypeFromGeneric(GenericIl2CppType pType)
 {
     if (Code.Image.Is64bits)
     {
         var generic  = Code.Image.ReadMappedObject <Il2CppGenericClass64>((long)pType.generic_class);
         var pInst    = Code.Image.ReadMappedObject <Il2CppGenericInst64>((long)generic.context.class_inst);
         var pointers = Code.Image.ReadMappedArray <ulong>((long)pInst.type_argv, (int)pInst.type_argc);
         var realType = Code.Image.ReadMappedObject <Il2CppType64>((long)pointers[0]);
         realType.Init();
         return(new GenericIl2CppType(realType));
     }
     else
     {
         var generic  = Code.Image.ReadMappedObject <Il2CppGenericClass>((long)pType.generic_class);
         var pInst    = Code.Image.ReadMappedObject <Il2CppGenericInst>(generic.context.class_inst);
         var pointers = Code.Image.ReadMappedArray <uint>(pInst.type_argv, (int)pInst.type_argc);
         var realType = Code.Image.ReadMappedObject <Il2CppType>(pointers[0]);
         realType.Init();
         return(new GenericIl2CppType(realType));
     }
 }
Exemplo n.º 6
0
 public string GetFullTypeName(GenericIl2CppType pType)
 {
     if (pType.type == Il2CppTypeEnum.IL2CPP_TYPE_CLASS || pType.type == Il2CppTypeEnum.IL2CPP_TYPE_VALUETYPE)
     {
         var ret = "";
         Il2CppTypeDefinition klass = Metadata.Types[pType.klassIndex];
         if (klass.namespaceIndex >= 0)
         {
             ret = Metadata.GetString(klass.namespaceIndex);
             if (ret.Length > 0)
             {
                 ret += ".";
             }
         }
         ret += Metadata.GetString(klass.nameIndex);
         return(ret);
     }
     else
     {
         return(this.GetTypeName(pType));
     }
 }
Exemplo n.º 7
0
        public string GetTypeName(GenericIl2CppType pType)
        {
            string ret;

            if (pType.type == Il2CppTypeEnum.IL2CPP_TYPE_CLASS || pType.type == Il2CppTypeEnum.IL2CPP_TYPE_VALUETYPE)
            {
                Il2CppTypeDefinition klass = Metadata.Types[pType.klassIndex];
                ret = Metadata.GetString(klass.nameIndex);
            }
            else if (pType.type == Il2CppTypeEnum.IL2CPP_TYPE_GENERICINST)
            {
                if (Code.Image.Is64bits)
                {
                    Il2CppGenericClass64 generic_class = Code.Image.ReadMappedObject <Il2CppGenericClass64>((long)pType.generic_class);
                    Il2CppTypeDefinition pMainDef      = Metadata.Types[generic_class.typeDefinitionIndex];
                    ret = Metadata.GetString(pMainDef.nameIndex);
                    var typeNames             = new List <string>();
                    Il2CppGenericInst64 pInst = Code.Image.ReadMappedObject <Il2CppGenericInst64>((long)generic_class.context.class_inst);
                    var pointers = Code.Image.ReadMappedArray <ulong>((long)pInst.type_argv, (int)pInst.type_argc);
                    for (ulong i = 0; i < pInst.type_argc; ++i)
                    {
                        var pOriType = Code.Image.ReadMappedObject <Il2CppType64>((long)pointers[i]);
                        pOriType.Init();
                        typeNames.Add(GetTypeName(new GenericIl2CppType(pOriType)));
                    }
                    ret += $"<{string.Join(", ", typeNames)}>";
                }
                else
                {
                    Il2CppGenericClass   generic_class = Code.Image.ReadMappedObject <Il2CppGenericClass>((long)pType.generic_class);
                    Il2CppTypeDefinition pMainDef      = Metadata.Types[generic_class.typeDefinitionIndex];
                    ret = Metadata.GetString(pMainDef.nameIndex);
                    var typeNames           = new List <string>();
                    Il2CppGenericInst pInst = Code.Image.ReadMappedObject <Il2CppGenericInst>(generic_class.context.class_inst);
                    var pointers            = Code.Image.ReadMappedArray <uint>(pInst.type_argv, (int)pInst.type_argc);
                    for (int i = 0; i < pInst.type_argc; ++i)
                    {
                        var pOriType = Code.Image.ReadMappedObject <Il2CppType>(pointers[i]);
                        pOriType.Init();
                        typeNames.Add(GetTypeName(new GenericIl2CppType(pOriType)));
                    }
                    ret += $"<{string.Join(", ", typeNames)}>";
                }
            }
            else if (pType.type == Il2CppTypeEnum.IL2CPP_TYPE_ARRAY)
            {
                if (Code.Image.Is64bits)
                {
                    var arrayType = Code.Image.ReadMappedObject <Il2CppArrayType64>((long)pType.dataArray);
                    var type      = Code.Image.ReadMappedObject <Il2CppType64>((long)arrayType.etype);
                    type.Init();
                    ret = $"{GetTypeName(new GenericIl2CppType(type))}[]";
                }
                else
                {
                    var arrayType = Code.Image.ReadMappedObject <Il2CppArrayType>((long)pType.dataArray);
                    var type      = Code.Image.ReadMappedObject <Il2CppType>(arrayType.etype);
                    type.Init();
                    ret = $"{GetTypeName(new GenericIl2CppType(type))}[]";
                }
            }
            else if (pType.type == Il2CppTypeEnum.IL2CPP_TYPE_SZARRAY)
            {
                if (Code.Image.Is64bits)
                {
                    var type = Code.Image.ReadMappedObject <Il2CppType64>((long)pType.dataType);
                    type.Init();
                    ret = $"{GetTypeName(new GenericIl2CppType(type))}[]";
                }
                else
                {
                    var type = Code.Image.ReadMappedObject <Il2CppType>((long)pType.dataType);
                    type.Init();
                    ret = $"{GetTypeName(new GenericIl2CppType(type))}[]";
                }
            }
            else
            {
                if ((int)pType.type >= szTypeString.Length)
                {
                    ret = "unknow";
                }
                else
                {
                    ret = szTypeString[(int)pType.type];
                }
            }
            return(ret);
        }