Ejemplo n.º 1
0
        public MethodInfo(Il2CppModel model, Il2CppMethodSpec spec, TypeInfo declaringType) : base(model, spec, declaringType)
        {
            var methodDef = model.MethodsByDefinitionIndex[spec.methodDefinitionIndex];

            // Add return parameter
            returnTypeReference = methodDef.Definition.returnType;
            ReturnParameter     = ((MethodInfo)methodDef).ReturnParameter;
        }
Ejemplo n.º 2
0
        // Initialize from specified assembly index in package
        public Assembly(Il2CppModel model, int imageIndex)
        {
            Model              = model;
            ImageDefinition    = Model.Package.Images[imageIndex];
            AssemblyDefinition = Model.Package.Assemblies[ImageDefinition.assemblyIndex];

            if (AssemblyDefinition.imageIndex != imageIndex)
            {
                throw new InvalidOperationException("Assembly/image index mismatch");
            }

            Index     = ImageDefinition.assemblyIndex;
            ShortName = Model.Package.Strings[ImageDefinition.nameIndex];

            // Get full assembly name
            var nameDef = AssemblyDefinition.aname;
            var name    = Model.Package.Strings[nameDef.nameIndex];
            var culture = Model.Package.Strings[nameDef.cultureIndex];

            if (string.IsNullOrEmpty(culture))
            {
                culture = "neutral";
            }
            var pkt = BitConverter.ToString(nameDef.publicKeyToken).Replace("-", "");

            if (pkt == "0000000000000000")
            {
                pkt = "null";
            }
            var version = string.Format($"{nameDef.major}.{nameDef.minor}.{nameDef.build}.{nameDef.revision}");

            FullName = string.Format($"{name}, Version={version}, Culture={culture}, PublicKeyToken={pkt.ToLower()}");

            if (ImageDefinition.entryPointIndex != -1)
            {
                // TODO: Generate EntryPoint method from entryPointIndex
            }

            // Find corresponding module (we'll need this for method pointers)
            ModuleDefinition = Model.Package.Modules?[ShortName];

            // Generate types in DefinedTypes from typeStart to typeStart+typeCount-1
            for (var t = ImageDefinition.typeStart; t < ImageDefinition.typeStart + ImageDefinition.typeCount; t++)
            {
                var type = new TypeInfo(t, this);

                // Don't add empty module definitions
                if (type.Name != "<Module>")
                {
                    DefinedTypes.Add(type);
                }
            }
        }
Ejemplo n.º 3
0
        // Create a concrete type parameter from a generic type parameter
        public ParameterInfo(Il2CppModel model, ParameterInfo generic, TypeInfo concrete)
        {
            DeclaringMethod = generic.DeclaringMethod;
            Name            = generic.Name;
            Position        = generic.Position;
            Attributes      = generic.Attributes;

            // Search for the concrete type's TypeRef index to store as the parameter type reference index
            paramTypeReference = Array.IndexOf(model.TypesByReferenceIndex, concrete);

            DefaultValue = generic.DefaultValue;
            DefaultValueMetadataAddress = generic.DefaultValueMetadataAddress;
        }
Ejemplo n.º 4
0
 public ConstructorInfo(Il2CppModel model, Il2CppMethodSpec spec, TypeInfo declaringType) : base(model, spec, declaringType)
 {
 }