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; }
public ReflectionController (ModuleDefinition module) { m_reader = new AggressiveReflectionReader (module); m_writer = new ReflectionWriter (module); m_helper = new ReflectionHelper (module); m_importer = new DefaultImporter (module); }
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); }
public CodeWriter(ReflectionWriter reflectWriter, MemoryBinaryWriter writer) { m_reflectWriter = reflectWriter; m_binaryWriter = writer; m_codeWriter = new MemoryBinaryWriter(); m_localSigCache = new Hashtable(); }
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); } }
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()); }
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)); }
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; } }
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(); } }
public ReflectionCommand(ReflectionReader reader, ReflectionWriter writer) { this.reader = reader; this.writer = writer; }