コード例 #1
0
 void MatchExportedType(ExportedType exportedType, ModuleDefinition module, Regex regex, XPathNavigator nav)
 {
     if (regex.Match(exportedType.FullName).Success)
     {
         MarkingHelpers.MarkExportedType(exportedType, module);
         TypeDefinition type = null;
         try {
             type = exportedType.Resolve();
         }
         catch (AssemblyResolutionException) {
         }
         if (type != null)
         {
             ProcessType(type, nav);
         }
     }
 }
コード例 #2
0
        /// <summary>
        /// Get the full name of an ExportedType, including namespace
        /// </summary>
        private static string GetExportedTypeFullName(MetadataReader mdReader, ExportedTypeHandle handle)
        {
            string typeNamespace = "";
            string typeStr       = "";

            try
            {
                ExportedType exportedType = mdReader.GetExportedType(handle);
                typeStr       = "." + mdReader.GetString(exportedType.Name) + typeStr;
                typeNamespace = mdReader.GetString(exportedType.Namespace);
            }
            catch (BadImageFormatException)
            {
                return(null);
            }
            return(typeNamespace + typeStr);
        }
コード例 #3
0
 private static string GetFullName(MetadataReader reader, ExportedType type)
 {
     Debug.Assert(type.IsForwarder);
     if (type.Implementation.Kind == HandleKind.AssemblyReference)
     {
         var name     = reader.GetString(type.Name);
         var ns       = type.Namespace.IsNil ? null : reader.GetString(type.Namespace);
         var fullName = string.IsNullOrEmpty(ns) ? name : ns + "." + name;
         return(fullName);
     }
     if (type.Implementation.Kind == HandleKind.ExportedType)
     {
         var name = reader.GetString(type.Name);
         Debug.Assert(type.Namespace.IsNil);
         return(GetFullName(reader, reader.GetExportedType((ExportedTypeHandle)type.Implementation)) + "." + name);
     }
     throw new NotSupportedException(type.Implementation.Kind.ToString());
 }
コード例 #4
0
        private uint AddImplementation(IImplementation implementation)
        {
            if (implementation is null)
            {
                return(0);
            }

            var token = implementation switch
            {
                AssemblyReference assemblyReference => GetAssemblyReferenceToken(assemblyReference),
                ExportedType exportedType => AddExportedType(exportedType),
                FileReference fileReference => AddFileReference(fileReference),
                _ => throw new ArgumentOutOfRangeException(nameof(implementation))
            };

            return(Metadata.TablesStream
                   .GetIndexEncoder(CodedIndex.Implementation)
                   .EncodeToken(token));
        }
コード例 #5
0
        public static TypeReference CreateReference(this ExportedType exportedType, ModuleDefinition exportingModule, ModuleDefinition targetModule)
        {
            var typeDef       = exportedType.ResolveRequiredType();
            var metadataScope = MapAssemblyReference(targetModule, exportingModule.Assembly.Name);

            var typeRef = new TypeReference(exportedType.Namespace, exportedType.Name, exportingModule, metadataScope, typeDef.IsValueType)
            {
                DeclaringType = exportedType.DeclaringType?.CreateReference(exportingModule, targetModule)
            };

            if (typeDef.HasGenericParameters)
            {
                foreach (var param in typeDef.GenericParameters)
                {
                    typeRef.GenericParameters.Add(new GenericParameter(param.Name, typeRef));
                }
            }

            return(typeRef);
        }
コード例 #6
0
ファイル: TypeExporters.cs プロジェクト: Zer0Ph34r/GUI_Branch
        private void Commit()
        {
            ModuleDefinition      victimModule   = _victimAssembly.MainModule;
            ModuleDefinition      exportedModule = _exportedAssembly.MainModule;
            AssemblyNameReference modReference   = victimModule.AssemblyReferences.First(r => r.FullName == _exportedAssembly.MainModule.Assembly.Name.FullName);

            foreach (TypeDefinition oldType in _terminators.Values)
            {
                victimModule.Types.Remove(oldType);
            }

            foreach (TypeExporter exporter in _exporters.Values)
            {
                TypeDefinition oldType = exporter.VictimType;

                ExportedType exportedType = new ExportedType(oldType.Namespace, oldType.Name, exportedModule, modReference);
                victimModule.Types.Remove(oldType);
                victimModule.ExportedTypes.Add(exportedType);
            }
        }
コード例 #7
0
        private static void AddNestedTypes(TypeDefinition mainModuleType, ExportedType importedType, ModuleDefinition targetModule)
        {
            foreach (var nested in mainModuleType.NestedTypes)
            {
                if ((nested.Attributes & TypeAttributes.VisibilityMask) != TypeAttributes.NestedPublic)
                {
                    continue;
                }

                var nestedImport = targetModule.ImportReference(nested);
                var nestedExport = new ExportedType(nestedImport.Namespace, nestedImport.Name, nestedImport.Module, nestedImport.Scope)
                {
                    Attributes = TypeAttributes.Forwarder
                };
                nestedExport.DeclaringType = importedType;
                targetModule.ExportedTypes.Add(nestedExport);

                AddNestedTypes(nested, nestedExport, targetModule);
            }
        }
コード例 #8
0
ファイル: RepackImporter.cs プロジェクト: loongly/il-repack
        public void Import(ExportedType type, Collection <ExportedType> col, ModuleDefinition module)
        {
            var scope = default(IMetadataScope);

            // try to skip redirects to merged assemblies
            if (type.Scope is AssemblyNameReference)
            {
                if (_repackContext.MergedAssemblies.Any(x => x.Name.Name == ((AssemblyNameReference)type.Scope).Name))
                {
                    return;
                }
                scope = _repackContext.PlatformFixer.FixPlatformVersion(((AssemblyNameReference)type.Scope));
            }
            else if (type.Scope is ModuleReference)
            {
                if (_repackContext.MergedAssemblies.SelectMany(x => x.Modules).Any(x => x.Name == ((ModuleReference)type.Scope).Name))
                {
                    return;
                }
                // TODO fix scope (should probably be added to target ModuleReferences, otherwise metadatatoken will be wrong)
                // I've never seen an exported type redirected to a module, doing so would be blind guessing
                scope = type.Scope;
            }
            if (type.IsForwarder)
            {
                // Skip duplicated forwarders
                var fullName = type.FullName;
                if (col.Any(t => t.IsForwarder && t.FullName == fullName))
                {
                    return;
                }
            }
            var nt = new ExportedType(type.Namespace, type.Name, module, scope)
            {
                Attributes    = type.Attributes,
                Identifier    = type.Identifier, // TODO: CHECK THIS when merging multiple assemblies when exported types ?
                DeclaringType = type.DeclaringType
            };

            col.Add(nt);
        }
コード例 #9
0
        private Object ResolveExportedType(ExportedTypeHandle handle)
        {
            ExportedType exportedType = _metadataReader.GetExportedType(handle);

            var implementation = GetObject(exportedType.Implementation, NotFoundBehavior.ReturnResolutionFailure);

            if (implementation is ModuleDesc)
            {
                var          module       = (ModuleDesc)implementation;
                string       nameSpace    = _metadataReader.GetString(exportedType.Namespace);
                string       name         = _metadataReader.GetString(exportedType.Name);
                MetadataType resolvedType = module.GetType(nameSpace, name, NotFoundBehavior.ReturnResolutionFailure);
                if (resolvedType == null)
                {
                    return(ModuleDesc.GetTypeResolutionFailure);
                }
                return(resolvedType);
            }
            else
            if (implementation is MetadataType)
            {
                var    type       = (MetadataType)implementation;
                string name       = _metadataReader.GetString(exportedType.Name);
                var    nestedType = type.GetNestedType(name);
                if (nestedType == null)
                {
                    return(ResolutionFailure.GetTypeLoadResolutionFailure(name, this));
                }
                return(nestedType);
            }
            else if (implementation is ResolutionFailure)
            {
                return(implementation);
            }
            else
            {
                ThrowHelper.ThrowBadImageFormatException();
                return(null);
            }
        }
コード例 #10
0
ファイル: UILoader.cs プロジェクト: xjqhhh/KrkrExtract
        static dynamic LoadFluentDesignUI()
        {
            try
            {
                var Dll = Assembly.LoadFile(Path.Combine(Directory.GetCurrentDirectory(), "KrkrExtract.UI.FluentDesign.dll"));

                foreach (Type ExportedType in Dll.GetExportedTypes())
                {
                    if (ExportedType.GetTypeInfo().Name == "KrkrExtractUIFluentDesign")
                    {
                        return(Activator.CreateInstance(ExportedType));
                    }
                }
                throw new EntryPointNotFoundException("KrkrExtractUIFluentDesign not found");
            }
            catch (Exception e)
            {
                MessageBox.Show(e.ToString(), "KrkrExtract (Loadind UI)", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

            return(null);
        }
コード例 #11
0
ファイル: PlatformFixer.cs プロジェクト: js6pak/il-repack
        public void FixPlatformVersion(ExportedType exported)
        {
            if (exported == null)
            {
                return;
            }

            AssemblyNameReference scopeAsm = exported.Scope as AssemblyNameReference;

            if (scopeAsm == null)
            {
                return;
            }

            var platformAsm = GetFixedPlatformVersion(scopeAsm);

            if (platformAsm == null)
            {
                return;
            }

            exported.Scope = platformAsm;
        }
コード例 #12
0
 private void InitilizeAssemblies(ProductVersion productVersion, string[] files)
 {
     foreach (var file in files)
     {
         var         directory = Path.GetDirectoryName(file);
         var         xmlFile   = Path.Combine(directory, Path.GetFileNameWithoutExtension(file) + ".xml");
         XmlDocument doc       = new XmlDocument();
         doc.Load(xmlFile);
         var members = doc.SelectNodes("/doc/members/member")
                       .OfType <XmlNode>()
                       .ToDictionary(x => x.Attributes["name"].Value, x => x.SelectSingleNode("summary").InnerText?.Trim());
         var types = Assembly.LoadFile(file).GetExportedTypes().Where(x => x.IsPublic)
                     .ToList();
         foreach (var type in types)
         {
             var typeDescription = GetClassSummary(members, type);
             var exportedType    = new ExportedType
             {
                 Description = typeDescription,
                 Name        = Regex.Replace(type.Name, @"\`\d+", string.Empty),
                 Namespace   = type.Namespace
             };
             if (type.IsGenericType)
             {
                 exportedType.IsGeneric         = true;
                 exportedType.GenericParameters = type.GetGenericArguments().Select(x => new ExportedTypeGenericParameter()
                 {
                     Name         = Regex.Replace(x.Name, @"\`\d+", string.Empty),
                     Description  = GetClassSummary(members, x),
                     ExportedType = exportedType
                 }).ToList();
             }
             productVersion.ExportedTypes.Add(exportedType);
             InitilizeTypes(type, exportedType, members);
         }
     }
 }
コード例 #13
0
        protected sealed override void IterateTypeForwards(TypeForwardHandler handler)
        {
            MetadataReader reader = Reader;

            foreach (ExportedTypeHandle exportedTypeHandle in reader.ExportedTypes)
            {
                ExportedType exportedType = reader.GetExportedType(exportedTypeHandle);
                if (!exportedType.IsForwarder)
                {
                    continue;
                }

                EntityHandle implementation = exportedType.Implementation;
                if (implementation.Kind != HandleKind.AssemblyReference) // This check also weeds out nested types. This is intentional.
                {
                    continue;
                }

                RoAssembly          redirectedAssembly = ((AssemblyReferenceHandle)implementation).ResolveToAssemblyOrExceptionAssembly(GetEcmaManifestModule());
                ReadOnlySpan <byte> ns   = exportedType.Namespace.AsReadOnlySpan(reader);
                ReadOnlySpan <byte> name = exportedType.Name.AsReadOnlySpan(reader);
                handler(redirectedAssembly, ns, name);
            }
        }
コード例 #14
0
 protected override TypeDefinition ProcessExportedType(ExportedType exported, AssemblyDefinition assembly)
 {
     MarkingHelpers.MarkExportedType(exported, assembly.MainModule, new DependencyInfo(DependencyKind.XmlDescriptor, _xmlDocumentLocation));
     return(base.ProcessExportedType(exported, assembly));
 }
コード例 #15
0
        private static ExportEntryViewModel GetEntryViewModel(ExportedType export)
        {
            ExportEntryViewModel vm = new ExportEntryViewModel();
            vm.Name = export.Attribute.Alias;
            vm.DisplayName = InformationAttribute.GetDisplayName(export.Type);
            vm.Description = InformationAttribute.GetDescription(export.Type);
            if (string.IsNullOrWhiteSpace(vm.Description))
            {
                // If there is no useful description, set it to null to make TargetNullValue in binding effective.
                vm.Description = null;
            }

            return vm;
        }
 /// <inheritdoc />
 public int GetHashCode(ExportedType obj)
 {
     return(GetHashCode((ITypeDescriptor)obj));
 }
コード例 #17
0
 /// <summary>
 /// Gets cloners for the given source item.
 /// </summary>
 /// <param name="item">Item to get cloners for.</param>
 /// <returns>Cloners for the <paramref name="item"/>.</returns>
 protected override IReadOnlyCollection <ICloner <object, object> > InvokeForItem(ExportedType item)
 {
     return(new ICloner <object, object> [0]);
 }
コード例 #18
0
ファイル: EntityToString.cs プロジェクト: saul/Refasmer
 public static string ToString(this MetadataReader reader, ExportedType x) => $"{{ExpType[{RowId(x):X}]: {reader.ToString( x.Namespace)}::{reader.ToString( x.Name)} {reader.ToString( x.Implementation)}[{x.GetTypeDefinitionId()}]}}";
コード例 #19
0
 protected virtual TypeDefinition ProcessExportedType(ExportedType exported, AssemblyDefinition assembly) => exported.Resolve();
コード例 #20
0
ファイル: Tabels.cs プロジェクト: MishaTY/DotNetParser
        public Tabels(PEFile p)
        {
            //Init
            this.r = p.MetadataReader;

            //Read all of the tabels
            ModuleTabel           = new List <Module>();
            TypeRefTabel          = new List <TypeRef>();
            TypeDefTabel          = new List <TypeDef>();
            FieldTabel            = new List <Field>();
            MethodTabel           = new List <Method>();
            ParmTabel             = new List <Param>();
            InterfaceImplTable    = new List <InterfaceImpl>();
            MemberRefTabelRow     = new List <MemberRef>();
            ConstantTabel         = new List <Constant>();
            CustomAttributeTabel  = new List <CustomAttribute>();
            FieldMarshalTabel     = new List <FieldMarshal>();
            DeclSecurityTabel     = new List <DeclSecurity>();
            ClassLayoutTabel      = new List <ClassLayout>();
            FieldLayoutTabel      = new List <FieldLayout>();
            StandAloneSigTabel    = new List <StandAloneSig>();
            EventMapTabel         = new List <EventMap>();
            EventTabel            = new List <Event>();
            PropertyMapTabel      = new List <PropertyMap>();
            PropertyTabel         = new List <PropertyTabel>();
            MethodSemanticsTabel  = new List <MethodSemantics>();
            MethodImplTabel       = new List <MethodImpl>();
            ModuleRefTabel        = new List <ModuleRef>();
            TypeSpecTabel         = new List <TypeSpec>();
            ImplMapTabel          = new List <ImplMap>();
            FieldRVATabel         = new List <FieldRVA>();
            AssemblyTabel         = new List <Assembly>();
            AssemblyRefTabel      = new List <AssemblyRef>();
            FileTable             = new List <File>();
            ExportedTypeTable     = new List <ExportedType>();
            ManifestResourceTable = new List <ManifestResource>();
            NestedClassTable      = new List <NestedClass>();
            GenericParamTable     = new List <GenericParam>();
            MethodSpecTable       = new List <MethodSpec>();

            int a = 0;

            //Read module Tabel (if any)
            if ((p.ClrMetaDataStreamHeader.TablesFlags & MetadataTableFlags.Module) != 0)
            {
                for (int i = 0; i < p.ClrMetaDataStreamHeader.TableSizes[a]; i++)
                {
                    var m = new Module();
                    m.Read(r);
                    ModuleTabel.Add(m);
                }
                a++;
            }
            //Read TypeRef Tabel
            if ((p.ClrMetaDataStreamHeader.TablesFlags & MetadataTableFlags.TypeRef) != 0)
            {
                for (int i = 0; i < p.ClrMetaDataStreamHeader.TableSizes[a]; i++)
                {
                    var m = new TypeRef();
                    m.Read(r);
                    TypeRefTabel.Add(m);
                }
                a++;
            }
            //Read TypeDef Tabel
            if ((p.ClrMetaDataStreamHeader.TablesFlags & MetadataTableFlags.TypeDef) != 0)
            {
                for (int i = 0; i < p.ClrMetaDataStreamHeader.TableSizes[a]; i++)
                {
                    var m = new TypeDef();
                    m.Read(r);
                    TypeDefTabel.Add(m);
                }
                a++;
            }
            //Read Field Tabel
            if ((p.ClrMetaDataStreamHeader.TablesFlags & MetadataTableFlags.Field) != 0)
            {
                for (int i = 0; i < p.ClrMetaDataStreamHeader.TableSizes[a]; i++)
                {
                    var m = new Field();
                    m.Read(r);
                    FieldTabel.Add(m);
                }
                a++;
            }
            //Read Method tabel
            if ((p.ClrMetaDataStreamHeader.TablesFlags & MetadataTableFlags.Method) != 0)
            {
                for (int i = 0; i < p.ClrMetaDataStreamHeader.TableSizes[a]; i++)
                {
                    var m = new Method();
                    m.Read(r);
                    MethodTabel.Add(m);
                }
                a++;
            }
            //Read Parm Tabel
            if ((p.ClrMetaDataStreamHeader.TablesFlags & MetadataTableFlags.Param) != 0)
            {
                for (int i = 0; i < p.ClrMetaDataStreamHeader.TableSizes[a]; i++)
                {
                    var m = new Param();
                    m.Read(r);
                    ParmTabel.Add(m);
                }
                a++;
            }
            //Read interfaceimpl Tabel
            if ((p.ClrMetaDataStreamHeader.TablesFlags & MetadataTableFlags.InterfaceImpl) != 0)
            {
                for (int i = 0; i < p.ClrMetaDataStreamHeader.TableSizes[a]; i++)
                {
                    var m = new InterfaceImpl();
                    m.Read(r);
                    InterfaceImplTable.Add(m);
                }
                a++;
            }
            //Read MemberRef tabel
            if ((p.ClrMetaDataStreamHeader.TablesFlags & MetadataTableFlags.MemberRef) != 0)
            {
                for (int i = 0; i < p.ClrMetaDataStreamHeader.TableSizes[a]; i++)
                {
                    var m = new MemberRef();
                    m.Read(r);
                    MemberRefTabelRow.Add(m);
                }
                a++;
            }
            //Read Constant tabel
            if ((p.ClrMetaDataStreamHeader.TablesFlags & MetadataTableFlags.Constant) != 0)
            {
                for (int i = 0; i < p.ClrMetaDataStreamHeader.TableSizes[a]; i++)
                {
                    var m = new Constant();
                    m.Read(r);
                    ConstantTabel.Add(m);
                }
                a++;
            }
            //Read CustomAttribute tabel
            if ((p.ClrMetaDataStreamHeader.TablesFlags & MetadataTableFlags.CustomAttribute) != 0)
            {
                for (int i = 0; i < p.ClrMetaDataStreamHeader.TableSizes[a]; i++)
                {
                    var m = new CustomAttribute();
                    m.Read(r);
                    CustomAttributeTabel.Add(m);
                }
                a++;
            }
            //Read FieldMarshal tabel (Please test)
            if ((p.ClrMetaDataStreamHeader.TablesFlags & MetadataTableFlags.FieldMarshal) != 0)
            {
                for (int i = 0; i < p.ClrMetaDataStreamHeader.TableSizes[a]; i++)
                {
                    var m = new FieldMarshal();
                    m.Read(r);
                    FieldMarshalTabel.Add(m);
                }
                a++;
            }
            //Read DeclSecurity tabel
            if ((p.ClrMetaDataStreamHeader.TablesFlags & MetadataTableFlags.DeclSecurity) != 0)
            {
                for (int i = 0; i < p.ClrMetaDataStreamHeader.TableSizes[a]; i++)
                {
                    var m = new DeclSecurity();
                    m.Read(r);
                    DeclSecurityTabel.Add(m);
                }
                a++;
            }
            //Read ClassLayout tabel
            if ((p.ClrMetaDataStreamHeader.TablesFlags & MetadataTableFlags.ClassLayout) != 0)
            {
                for (int i = 0; i < p.ClrMetaDataStreamHeader.TableSizes[a]; i++)
                {
                    var m = new ClassLayout();
                    m.Read(r);
                    ClassLayoutTabel.Add(m);
                }
                a++;
            }
            //Read FieldLayout tabel
            if ((p.ClrMetaDataStreamHeader.TablesFlags & MetadataTableFlags.FieldLayout) != 0)
            {
                for (int i = 0; i < p.ClrMetaDataStreamHeader.TableSizes[a]; i++)
                {
                    var m = new FieldLayout();
                    m.Read(r);
                    FieldLayoutTabel.Add(m);
                }
                a++;
            }
            //Read StandAloneSig tabel
            if ((p.ClrMetaDataStreamHeader.TablesFlags & MetadataTableFlags.StandAloneSig) != 0)
            {
                for (int i = 0; i < p.ClrMetaDataStreamHeader.TableSizes[a]; i++)
                {
                    var m = new StandAloneSig();
                    m.Read(r);
                    StandAloneSigTabel.Add(m);
                }
                a++;
            }
            //Read EventMap tabel (please test)
            if ((p.ClrMetaDataStreamHeader.TablesFlags & MetadataTableFlags.EventMap) != 0)
            {
                for (int i = 0; i < p.ClrMetaDataStreamHeader.TableSizes[a]; i++)
                {
                    var m = new EventMap();
                    m.Read(r);
                    EventMapTabel.Add(m);
                }
                a++;
            }
            //Read event tabel
            if ((p.ClrMetaDataStreamHeader.TablesFlags & MetadataTableFlags.Event) != 0)
            {
                for (int i = 0; i < p.ClrMetaDataStreamHeader.TableSizes[a]; i++)
                {
                    var m = new Event();
                    m.Read(r);
                    EventTabel.Add(m);
                }
                a++;
            }
            //Read Property Map tabel
            if ((p.ClrMetaDataStreamHeader.TablesFlags & MetadataTableFlags.PropertyMap) != 0)
            {
                for (int i = 0; i < p.ClrMetaDataStreamHeader.TableSizes[a]; i++)
                {
                    var m = new PropertyMap();
                    m.Read(r);
                    PropertyMapTabel.Add(m);
                }
                a++;
            }
            //Read Property tabel
            if ((p.ClrMetaDataStreamHeader.TablesFlags & MetadataTableFlags.Property) != 0)
            {
                for (int i = 0; i < p.ClrMetaDataStreamHeader.TableSizes[a]; i++)
                {
                    var m = new PropertyTabel();
                    m.Read(r);
                    PropertyTabel.Add(m);
                }
                a++;
            }
            //Read MethodSemantics  tabel
            if ((p.ClrMetaDataStreamHeader.TablesFlags & MetadataTableFlags.MethodSemantics) != 0)
            {
                for (int i = 0; i < p.ClrMetaDataStreamHeader.TableSizes[a]; i++)
                {
                    var m = new MethodSemantics();
                    m.Read(r);
                    MethodSemanticsTabel.Add(m);
                }
                a++;
            }
            //Read MethodImpl tabel (Please test)
            if ((p.ClrMetaDataStreamHeader.TablesFlags & MetadataTableFlags.MethodImpl) != 0)
            {
                for (int i = 0; i < p.ClrMetaDataStreamHeader.TableSizes[a]; i++)
                {
                    var m = new MethodImpl();
                    m.Read(r);
                    MethodImplTabel.Add(m);
                }
                a++;
            }
            //Read ModuleRef tabel (pls test)
            if ((p.ClrMetaDataStreamHeader.TablesFlags & MetadataTableFlags.ModuleRef) != 0)
            {
                for (int i = 0; i < p.ClrMetaDataStreamHeader.TableSizes[a]; i++)
                {
                    var m = new ModuleRef();
                    m.Read(r);
                    ModuleRefTabel.Add(m);
                }
                a++;
            }
            //Read TypeSpec tabel (pls test)
            if ((p.ClrMetaDataStreamHeader.TablesFlags & MetadataTableFlags.TypeSpec) != 0)
            {
                for (int i = 0; i < p.ClrMetaDataStreamHeader.TableSizes[a]; i++)
                {
                    var m = new TypeSpec();
                    m.Read(r);
                    TypeSpecTabel.Add(m);
                }
                a++;
            }
            //Read ImplMap tabel (pls test)
            if ((p.ClrMetaDataStreamHeader.TablesFlags & MetadataTableFlags.ImplMap) != 0)
            {
                for (int i = 0; i < p.ClrMetaDataStreamHeader.TableSizes[a]; i++)
                {
                    var m = new ImplMap();
                    m.Read(r);
                    ImplMapTabel.Add(m);
                }
                a++;
            }
            //Read FieldRVA  tabel (pls test)
            if ((p.ClrMetaDataStreamHeader.TablesFlags & MetadataTableFlags.FieldRVA) != 0)
            {
                for (int i = 0; i < p.ClrMetaDataStreamHeader.TableSizes[a]; i++)
                {
                    var m = new FieldRVA();
                    m.Read(r);
                    FieldRVATabel.Add(m);
                }
                a++;
            }
            //Read Assembly tabel (pls test)
            if ((p.ClrMetaDataStreamHeader.TablesFlags & MetadataTableFlags.Assembly) != 0)
            {
                for (int i = 0; i < p.ClrMetaDataStreamHeader.TableSizes[a]; i++)
                {
                    var m = new Assembly();
                    m.Read(r);
                    AssemblyTabel.Add(m);
                }
                a++;
            }

            //Read ignored tabels (These never should be present!)
            if ((p.ClrMetaDataStreamHeader.TablesFlags & MetadataTableFlags.AssemblyProcessor) != 0)
            {
                for (int i = 0; i < p.ClrMetaDataStreamHeader.TableSizes[a]; i++)
                {
                    var proc = r.ReadUInt32();
                }
                a++;
            }
            if ((p.ClrMetaDataStreamHeader.TablesFlags & MetadataTableFlags.AssemblyOS) != 0)
            {
                for (int i = 0; i < p.ClrMetaDataStreamHeader.TableSizes[a]; i++)
                {
                    r.BaseStream.Position += 11; //Test please
                }
                a++;
            }
            //Read AssemblyRef Tabel
            if ((p.ClrMetaDataStreamHeader.TablesFlags & MetadataTableFlags.AssemblyRef) != 0)
            {
                for (int i = 0; i < p.ClrMetaDataStreamHeader.TableSizes[a]; i++)
                {
                    var m = new AssemblyRef();
                    m.Read(r);
                    AssemblyRefTabel.Add(m);
                }
                a++;
            }
            //Read AssemblyRefProcessor Tabel
            if ((p.ClrMetaDataStreamHeader.TablesFlags & MetadataTableFlags.AssemblyRefProcessor) != 0)
            {
                for (int i = 0; i < p.ClrMetaDataStreamHeader.TableSizes[a]; i++)
                {
                    r.BaseStream.Position += 8; //Test please
                }
                a++;
            }
            //Read AssemblyRefOS Tabel
            if ((p.ClrMetaDataStreamHeader.TablesFlags & MetadataTableFlags.AssemblyRefOS) != 0)
            {
                for (int i = 0; i < p.ClrMetaDataStreamHeader.TableSizes[a]; i++)
                {
                    r.BaseStream.Position += 16; //Test please
                }
                a++;
            }
            //Read File Tabel
            if ((p.ClrMetaDataStreamHeader.TablesFlags & MetadataTableFlags.File) != 0)
            {
                for (int i = 0; i < p.ClrMetaDataStreamHeader.TableSizes[a]; i++)
                {
                    var m = new File();
                    m.Read(r);
                    FileTable.Add(m);
                }
                a++;
            }
            //Read ExportedType Tabel
            if ((p.ClrMetaDataStreamHeader.TablesFlags & MetadataTableFlags.ExportedType) != 0)
            {
                for (int i = 0; i < p.ClrMetaDataStreamHeader.TableSizes[a]; i++)
                {
                    var m = new ExportedType();
                    m.Read(r);
                    ExportedTypeTable.Add(m);
                }
                a++;
            }
            //Read ManifestResource Tabel
            if ((p.ClrMetaDataStreamHeader.TablesFlags & MetadataTableFlags.ManifestResource) != 0)
            {
                for (int i = 0; i < p.ClrMetaDataStreamHeader.TableSizes[a]; i++)
                {
                    var m = new ManifestResource();
                    m.Read(r);
                    ManifestResourceTable.Add(m);
                }
                a++;
            }
            //Read NestedClass Tabel
            if ((p.ClrMetaDataStreamHeader.TablesFlags & MetadataTableFlags.NestedClass) != 0)
            {
                for (int i = 0; i < p.ClrMetaDataStreamHeader.TableSizes[a]; i++)
                {
                    var m = new NestedClass();
                    m.Read(r);
                    NestedClassTable.Add(m);
                }
                a++;
            }
            //Read GenericParam Tabel
            if ((p.ClrMetaDataStreamHeader.TablesFlags & MetadataTableFlags.GenericParam) != 0)
            {
                for (int i = 0; i < p.ClrMetaDataStreamHeader.TableSizes[a]; i++)
                {
                    var m = new GenericParam();
                    m.Read(r);
                    GenericParamTable.Add(m);
                }
                a++;
            }
            //Read MethodSpec Tabel
            if ((p.ClrMetaDataStreamHeader.TablesFlags & MetadataTableFlags.MethodSpec) != 0)
            {
                for (int i = 0; i < p.ClrMetaDataStreamHeader.TableSizes[a]; i++)
                {
                    var m = new MethodSpec();
                    m.Read(r);
                    MethodSpecTable.Add(m);
                }
                a++;
            }
        }
コード例 #21
0
        public static bool GetMatchingExportedType(this ModuleDefinition module, TypeDefinition typeDefinition, out ExportedType exportedType)
        {
            exportedType = null;
            if (!module.HasExportedTypes || typeDefinition == null)
            {
                return(false);
            }

            foreach (var et in module.ExportedTypes)
            {
                if (et.Resolve() == typeDefinition)
                {
                    exportedType = et;
                    return(true);
                }
            }

            return(false);
        }
コード例 #22
0
        public void Save(ExportedType type, string path)
        {
            var result = ToString();

            File.WriteAllText(path, result);
        }
コード例 #23
0
 public void MarkExportedType(ExportedType type, ModuleDefinition module, in DependencyInfo reason)
コード例 #24
0
 /// <summary>
 /// Gets a hint at the likely row number of the target type in the TypeDef table of its module.
 /// If the namespaces and names do not match, resolution falls back to a full search of the
 /// target TypeDef table. Ignored and should be zero if <see cref="ExportedType.IsForwarder"/> is
 /// true.
 /// </summary>
 public static int GetTypeDefinitionId(this ExportedType exportedType)
 {
     return((int)exportedType.reader.ExportedTypeTable.GetTypeDefId(exportedType.rowId));
 }
コード例 #25
0
ファイル: CecilProcessor.cs プロジェクト: Ark-kun/Piranha
 protected virtual void ProcessExportedType(ExportedType exportedType)
 {
 }
コード例 #26
0
 public ExportedTypeEntry(int metadataOffset, PEFile module, ExportedTypeHandle handle, ExportedType type)
 {
     this.metadataOffset = metadataOffset;
     this.module         = module;
     this.metadata       = module.Metadata;
     this.handle         = handle;
     this.type           = type;
 }
コード例 #27
0
 protected override TypeDefinition ProcessExportedType(ExportedType exported, AssemblyDefinition assembly) => null;
コード例 #28
0
 protected abstract void ProcessExportedType(ExportedType exportedType);
コード例 #29
0
 protected override TypeDefinition?ProcessExportedType(ExportedType exported, AssemblyDefinition assembly, XPathNavigator nav) => null;
コード例 #30
0
ファイル: TypesTableNode.cs プロジェクト: zwei222/coreclr
        public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false)
        {
            // This node does not trigger generation of other nodes.
            if (relocsOnly)
            {
                return(new ObjectData(Array.Empty <byte>(), Array.Empty <Relocation>(), 1, new ISymbolDefinitionNode[] { this }));
            }

            NativeWriter writer  = new NativeWriter();
            Section      section = writer.NewSection();

            VertexHashtable typesHashtable = new VertexHashtable();

            section.Place(typesHashtable);

            ReadyToRunTableManager r2rManager = (ReadyToRunTableManager)factory.MetadataManager;

            foreach (TypeInfo <TypeDefinitionHandle> defTypeInfo in r2rManager.GetDefinedTypes())
            {
                TypeDefinitionHandle defTypeHandle = defTypeInfo.Handle;
                int hashCode = 0;
                for (; ;)
                {
                    TypeDefinition defType       = defTypeInfo.MetadataReader.GetTypeDefinition(defTypeHandle);
                    string         namespaceName = defTypeInfo.MetadataReader.GetString(defType.Namespace);
                    string         typeName      = defTypeInfo.MetadataReader.GetString(defType.Name);
                    hashCode ^= ReadyToRunHashCode.NameHashCode(namespaceName, typeName);
                    if (!defType.Attributes.IsNested())
                    {
                        break;
                    }
                    defTypeHandle = defType.GetDeclaringType();
                }
                typesHashtable.Append(unchecked ((uint)hashCode), section.Place(new UnsignedConstant(((uint)MetadataTokens.GetRowNumber(defTypeInfo.Handle) << 1) | 0)));
            }

            foreach (TypeInfo <ExportedTypeHandle> expTypeInfo in r2rManager.GetExportedTypes())
            {
                ExportedTypeHandle expTypeHandle = expTypeInfo.Handle;
                int hashCode = 0;
                for (; ;)
                {
                    ExportedType expType       = expTypeInfo.MetadataReader.GetExportedType(expTypeHandle);
                    string       namespaceName = expTypeInfo.MetadataReader.GetString(expType.Namespace);
                    string       typeName      = expTypeInfo.MetadataReader.GetString(expType.Name);
                    hashCode ^= ReadyToRunHashCode.NameHashCode(namespaceName, typeName);
                    if (expType.Implementation.Kind != HandleKind.ExportedType)
                    {
                        // Not a nested class
                        break;
                    }
                    expTypeHandle = (ExportedTypeHandle)expType.Implementation;
                }
                typesHashtable.Append(unchecked ((uint)hashCode), section.Place(new UnsignedConstant(((uint)MetadataTokens.GetRowNumber(expTypeInfo.Handle) << 1) | 1)));
            }

            MemoryStream writerContent = new MemoryStream();

            writer.Save(writerContent);

            return(new ObjectData(
                       data: writerContent.ToArray(),
                       relocs: null,
                       alignment: 8,
                       definedSymbols: new ISymbolDefinitionNode[] { this }));
        }
コード例 #31
0
 /// <summary>
 /// Gets the parent of the given item.
 /// </summary>
 /// <param name="item">Item to get parent of.</param>
 /// <returns>Parent of <paramref name="item"/>.</returns>
 protected override IEnumerable <object> InvokeForItem(ExportedType item)
 {
     return(new object[] { item.DeclaringType });
 }