Example #1
0
        public override void VisitAssemblyDefinition(AssemblyDefinition asm)
        {
            if (asm.Kind != AssemblyKind.Dll && asm.EntryPoint == null)
            {
                throw new ReflectionException("Assembly does not have an entry point defined");
            }

            if ((asm.MainModule.Image.CLIHeader.Flags & RuntimeImage.ILOnly) == 0)
            {
                throw new NotImplementedException("Can not write a mixed mode assembly");
            }

            foreach (ModuleDefinition module in asm.Modules)
            {
                if (module.Image.CLIHeader.Metadata.VirtualAddress != RVA.Zero)
                {
                    ResetImage(module);
                }
            }

            ReflectionWriter rw = asm.MainModule.Controller.Writer;

            rw.StructureWriter = this;

            m_mdWriter    = rw.MetadataWriter;
            m_tableWriter = rw.MetadataTableWriter;
            m_rowWriter   = rw.MetadataRowWriter;
        }
Example #2
0
        public override void VisitAssemblyDefinition(AssemblyDefinition asm)
        {
            if (asm.Kind != AssemblyKind.Dll && asm.EntryPoint == null)
            {
                throw new ReflectionException("Assembly does not have an entry point defined");
            }

            if ((asm.MainModule.Image.CLIHeader.Flags & RuntimeImage.ILOnly) == 0)
            {
                throw new NotSupportedException("Can not write a mixed mode assembly");
            }

            foreach (ModuleDefinition module in asm.Modules)
            {
                if (module.Image.CLIHeader.Metadata.VirtualAddress != RVA.Zero)
                {
                    ResetImage(module);
                }
            }

            asm.MetadataToken = new MetadataToken(TokenType.Assembly, 1);
            ReflectionWriter rw = asm.MainModule.Controller.Writer;

            rw.StructureWriter = this;

            m_mdWriter    = rw.MetadataWriter;
            m_tableWriter = rw.MetadataTableWriter;
            m_rowWriter   = rw.MetadataRowWriter;

            if (!rw.SaveSymbols)
            {
                return;
            }

            FileStream fs = m_binaryWriter.BaseStream as FileStream;

            if (fs != null)
            {
                rw.OutputFile = fs.Name;
            }
        }