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; }
// 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); } } }
// 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; }
public ConstructorInfo(Il2CppModel model, Il2CppMethodSpec spec, TypeInfo declaringType) : base(model, spec, declaringType) { }