예제 #1
0
        /// <summary>
        /// Inject a resource to a module definition
        /// </summary>
        /// <param name="mdef">Module definition</param>
        /// <param name="name">Resource name</param>
        /// <param name="resourceType">Resource type</param>
        /// <returns>resource</returns>
        public static Resource InjectResource(ModuleDefinition mdef, string name, ResourceType resourceType)
        {
            Resource result;

            switch (resourceType)
            {
            case ResourceType.AssemblyLinked:
                var anref = new AssemblyNameReference(name, new Version());
                mdef.AssemblyReferences.Add(anref);

                result = new AssemblyLinkedResource(name, ManifestResourceAttributes.Public, anref);
                break;

            case ResourceType.Embedded:
                result = new EmbeddedResource(name, ManifestResourceAttributes.Public, new byte[] {});
                break;

            case ResourceType.Linked:
                result = new LinkedResource(name, ManifestResourceAttributes.Public);
                break;

            default:
                throw new ArgumentException();
            }

            mdef.Resources.Add(result);
            return(result);
        }
예제 #2
0
 private void HandleItem(AssemblyLinkedResource alres)
 {
     _alres = alres;
     Attributes.Bind(alres);
     NameReference.Bind(alres == null ? null : alres.Assembly);
 }
예제 #3
0
 public virtual void VisitAssemblyLinkedResource(AssemblyLinkedResource res)
 {
 }
 public override void VisitAssemblyLinkedResource(AssemblyLinkedResource res)
 {
     // TODO.
 }
예제 #5
0
 public override void VisitAssemblyLinkedResource(AssemblyLinkedResource alr)
 {
     m_writer.Write(".assembly extern ");
     m_writer.BaseWriter.WriteLine(Formater.Escape(alr.Assembly.Name));
 }
예제 #6
0
        private void FixAssemblyNameReference(AssemblyDefinition ad, StrongNameKeyPair sn)
        {
            Options.AppendTextInfo(String.Format("Fixing assembly reference: {0}\r\n", ad.Name.FullName));
            foreach (string name in _changedAssemblies.Keys)
            {
                if (name == ad.Name.Name)
                {
                    continue;
                }

                byte[] token  = null;
                byte[] pubKey = null;

                if (sn != null)
                {
                    pubKey = sn.PublicKey;
                    token  = TokenUtils.GetPublicKeyToken(pubKey, AssemblyHashAlgorithm.SHA1);
                }

                FixCustomAttributeReference(ad.CustomAttributes, name, token, pubKey);

                foreach (ModuleDefinition module in ad.Modules)
                {
                    foreach (AssemblyNameReference anr in module.AssemblyReferences)
                    {
                        if (anr.Name == name)
                        {
                            SetAssemblyNamePublicKey(anr, sn);
                            break;
                        }
                    }

                    foreach (TypeDefinition td in module.AllTypes)
                    {
                        FixCustomAttributeReference(td.CustomAttributes, name, token, pubKey);

                        foreach (PropertyDefinition pd in td.Properties)
                        {
                            FixCustomAttributeReference(pd.CustomAttributes, name, token, pubKey);
                        }
                        foreach (MethodDefinition method in td.Methods)
                        {
                            FixCustomAttributeReference(method.CustomAttributes, name, token, pubKey);
                        }
                        foreach (FieldDefinition fd in td.Fields)
                        {
                            FixCustomAttributeReference(fd.CustomAttributes, name, token, pubKey);
                        }
                        foreach (EventDefinition ed in td.Events)
                        {
                            FixCustomAttributeReference(ed.CustomAttributes, name, token, pubKey);
                        }
                    }

                    foreach (Resource r in module.Resources)
                    {
                        if (r is EmbeddedResource)
                        {
                            EmbeddedResource er = (EmbeddedResource)r;
                            FixByteReference(er.GetResourceData(), name, token);
                        }
                        else if (r is AssemblyLinkedResource)
                        {
                            AssemblyLinkedResource alr = (AssemblyLinkedResource)r;
                            if (alr.Assembly.Name == name)
                            {
                                SetAssemblyNamePublicKey(alr.Assembly, sn);
                            }
                        }
                        //else if (r is LinkedResource)
                        //{
                        //    LinkedResource lr = (LinkedResource)r;
                        //}
                    }
                }//end of each module
            }

            Application.DoEvents();
        }
예제 #7
0
 public override void VisitAssemblyLinkedResource(AssemblyLinkedResource res)
 {
     target.MainModule.Resources.Add(res);
 }