Ejemplo n.º 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;
        }
Ejemplo n.º 2
0
		public ReflectionController (ModuleDefinition module)
		{
			m_reader = new AggressiveReflectionReader (module);
			m_writer = new ReflectionWriter (module);
			m_helper = new ReflectionHelper (module);
			m_importer = new DefaultImporter (module);
		}
Ejemplo n.º 3
0
        public override IGeneratorCommandResult Run()
        {
            IDependencyResolver attributeResolver = this.resolver.CloneForCommands();
            Options             options           = attributeResolver.Get <Options>();
            IOptions            attributeOptions  = options.Current;

            attributeOptions.Language = this.Parameters.Language?.Name?.Equals(nameof(OutputLanguage.Csharp), StringComparison.CurrentCultureIgnoreCase) ?? false
                                            ? this.resolver.Get <CsharpLanguage>()
                                            : this.resolver.Get <TypeScriptLanguage>();

            if (attributeOptions.Language.IsTypeScript())
            {
                attributeOptions.SkipNamespace      = true;
                attributeOptions.PropertiesToFields = true;
            }
            attributeOptions.SetFromParameter(this.Parameters);

            ReflectionReadConfiguration readConfiguration = new();

            readConfiguration.Name         = this.Parameters.Name;
            readConfiguration.Namespace    = this.Parameters.Namespace;
            readConfiguration.Assembly     = this.Parameters.Assembly;
            readConfiguration.OnlySubTypes = this.Parameters.OnlySubTypes;

            attributeResolver.Create <ReflectionReader>().Read(readConfiguration, attributeOptions);
            attributeResolver.Get <IOutput>().DeleteAllRelatedFiles(this.Parameters.RelativePath);
            ReflectionWriter writer = attributeResolver.Create <ReflectionWriter>();

            writer.FormatNames();
            writer.Write(this.Parameters.RelativePath);

            this.resolver.Get <IEnvironment>().TransferObjects.AddIfNotExists(attributeResolver.Get <List <ITransferObject> >());

            return(this.Success());
        }
 public ReflectionController(ModuleDefinition module)
 {
     m_reader   = new AggressiveReflectionReader(module);
     m_writer   = new ReflectionWriter(module);
     m_helper   = new ReflectionHelper(module);
     m_importer = new DefaultImporter(module);
 }
Ejemplo n.º 5
0
        public CodeWriter(ReflectionWriter reflectWriter, MemoryBinaryWriter writer)
        {
            m_reflectWriter = reflectWriter;
            m_binaryWriter  = writer;
            m_codeWriter    = new MemoryBinaryWriter();

            m_localSigCache = new Hashtable();
        }
Ejemplo n.º 6
0
        public override void TerminateAssemblyDefinition(AssemblyDefinition asm)
        {
            foreach (ModuleDefinition mod in asm.Modules)
            {
                ReflectionWriter writer = mod.Controller.Writer;
                writer.VisitModuleDefinition(mod);
                writer.VisitTypeReferenceCollection(mod.TypeReferences);
                writer.VisitTypeDefinitionCollection(mod.Types);
                writer.VisitMemberReferenceCollection(mod.MemberReferences);
                writer.CompleteTypeDefinitions();

                writer.TerminateModuleDefinition(mod);
            }
        }
Ejemplo n.º 7
0
        public override IGeneratorCommandResult Run()
        {
            IOptions options = this.resolver.Get <Options>().Current;

            options.SetFromParameter(this.Parameters);
            options.Language = this.resolver.Get <CsharpLanguage>();
            ReflectionWriter writer = this.resolver.Create <ReflectionWriter>();

            writer.FormatNames();
            this.resolver.Get <IOutput>().DeleteAllRelatedFiles(this.Parameters.RelativePath);
            writer.Write(this.Parameters.RelativePath);

            return(this.Success());
        }
Ejemplo n.º 8
0
        public byte [] GetAsByteArray(CustomAttribute ca)
        {
            CustomAttribute customAttr = ca;

            if (!ca.Resolved)
            {
                if (customAttr.Blob != null)
                {
                    return(customAttr.Blob);
                }
                else
                {
                    return(new byte [0]);
                }
            }

            return(m_controller.Writer.SignatureWriter.CompressCustomAttribute(
                       ReflectionWriter.GetCustomAttributeSig(ca), ca.Constructor));
        }
Ejemplo n.º 9
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;
            }
        }
Ejemplo n.º 10
0
        void CopyOriginalImage()
        {
            original = assembly.MainModule.Image;
            stripped = Image.CreateImage();

            stripped.Accept(new CopyImageVisitor(original));

            assembly.MainModule.Image = stripped;

            original_tables = original.MetadataRoot.Streams.TablesHeap;
            stripped_tables = stripped.MetadataRoot.Streams.TablesHeap;

            TableCollection tables = original_tables.Tables;

            foreach (IMetadataTable table in tables)
            {
                stripped_tables.Tables.Add(table);
            }

            stripped_tables.Valid  = original_tables.Valid;
            stripped_tables.Sorted = original_tables.Sorted;

            reflection_writer = new ReflectionWriter(assembly.MainModule);
            reflection_writer.StructureWriter     = new StructureWriter(assembly, writer);
            reflection_writer.CodeWriter.Stripped = true;

            metadata_writer = reflection_writer.MetadataWriter;

            PatchHeap(metadata_writer.StringWriter, original.MetadataRoot.Streams.StringsHeap);
            PatchHeap(metadata_writer.GuidWriter, original.MetadataRoot.Streams.GuidHeap);
            PatchHeap(metadata_writer.UserStringWriter, original.MetadataRoot.Streams.UserStringsHeap);
            PatchHeap(metadata_writer.BlobWriter, original.MetadataRoot.Streams.BlobHeap);

            if (assembly.EntryPoint != null)
            {
                metadata_writer.EntryPointToken = assembly.EntryPoint.MetadataToken.ToUInt();
            }
        }
Ejemplo n.º 11
0
 public ReflectionCommand(ReflectionReader reader, ReflectionWriter writer)
 {
     this.reader = reader;
     this.writer = writer;
 }