Exemplo n.º 1
0
        public static IModule RewriteModule(IMetadataHost host, ILocalScopeProvider localScopeProvider, ISourceLocationProvider sourceLocationProvider, IModule module)
        {
            var m = new PropertyChangedWeaver(host);
            m._rewriter = new ReferenceReplacementRewriter(host, localScopeProvider, sourceLocationProvider);

            return m.Rewrite(module);
        }
Exemplo n.º 2
0
        public static IModule RewriteModule(IMetadataHost host, ILocalScopeProvider localScopeProvider, ISourceLocationProvider sourceLocationProvider, IModule module)
        {
            var m = new PropertyChangedWeaver(host);

            m._rewriter = new ReferenceReplacementRewriter(host, localScopeProvider, sourceLocationProvider);

            return(m.Rewrite(module));
        }
Exemplo n.º 3
0
        static int Main(string[] args)
        {
            if (args.Length != 1)
            {
                Console.WriteLine("Usage: ILWeave [Assembly]");

                return(1);
            }

            string tmpDir, newName, newPdb;

            using (var host = new PeReader.DefaultHost())
            {
                var module = host.LoadUnitFrom(args[0]) as IModule;

                if (module == null || module is Dummy)
                {
                    Console.WriteLine("{0} is not a PE file containing a CLR assembly, or an error occurred when loading it.", args[0]);

                    return(1);
                }

                module = new MetadataDeepCopier(host).Copy(module);
                PdbReader pdbReader = null;
                var       pdbFile   = Path.ChangeExtension(module.Location, "pdb");

                if (File.Exists(pdbFile))
                {
                    using (var pdbStream = File.OpenRead(pdbFile))
                    {
                        pdbReader = new PdbReader(pdbStream, host);
                    }
                }
                else
                {
                    Console.WriteLine("Could not load the PDB file for '" + module.Name.Value + "' . Proceeding anyway.");
                }
                using (pdbReader)
                {
                    var localScopeProvider = pdbReader == null ? null : new ILGenerator.LocalScopeProvider(pdbReader);

                    module = PropertyChangedWeaver.RewriteModule(
                        host,
                        localScopeProvider,
                        pdbReader,
                        module);

                    tmpDir  = Directory.CreateDirectory(Path.GetRandomFileName()).FullName;
                    newName = Path.Combine(tmpDir, Path.GetFileName(args[0]));

                    using (var peStream = File.Create(newName))
                    {
                        newPdb = Path.ChangeExtension(newName, ".pdb");

                        using (var pdbWriter = new PdbWriter(newPdb, pdbReader))
                        {
                            PeWriter.WritePeToStream(module, host, peStream, pdbReader, localScopeProvider, pdbWriter);
                        }
                    }
                }
            }

            var dst = Path.GetDirectoryName(args[0]);

            foreach (var s in Directory.GetFiles(tmpDir))
            {
                File.Copy(s, Path.Combine(dst, Path.GetFileName(s)), true);
            }

            Directory.Delete(tmpDir, true);

            return(0);
        }