public TypeDefBuilder(BuildReferences references, TypeDefMetadataTableRow fromRow) { _references = references; _assembly = references.Assembly; _fromRow = fromRow; _metadata = references.Metadata; _map = references.Map; _metadataStream = _metadata.GetMetadataStream(); }
public MethodDefBuilder(BuildReferences references, TypeDef container, MethodMetadataTableRow fromRow) { _metadata = references.Metadata; _map = references.Map; _assembly = references.Assembly; _container = container; _fromRow = fromRow; _metadataStream = _metadata.Streams[Streams.MetadataStream] as MetadataStream; _blobStream = _metadata.Streams[Streams.BlobStream] as BlobStream; _references = references; }
/// <include file='code-documentation\reflection.xml' path='docs/assemblydef/member[@name="resolvemetadatatoken"]/*'/> public ReflectedMember ResolveMetadataToken(uint metadataToken) { MetadataToDefinitionMap map = _peCoffFile.Map; MetadataStream metadataStream = _peCoffFile.GetMetadataDirectory().GetMetadataStream(); // Get the details in the token ILMetadataToken token = (ILMetadataToken)(metadataToken & 0xff000000); uint index = metadataToken & 0x00ffffff; ReflectedMember returnItem = null; // switch (token) { // Method related tokens case ILMetadataToken.MethodDef: returnItem = map.GetDefinition(MetadataTables.MethodDef, metadataStream.GetEntryFor(MetadataTables.MethodDef, index)); break; case ILMetadataToken.MemberRef: returnItem = map.GetDefinition(MetadataTables.MemberRef, metadataStream.GetEntryFor(MetadataTables.MemberRef, index)); break; case ILMetadataToken.MethodSpec: returnItem = map.GetDefinition(MetadataTables.MethodSpec, metadataStream.GetEntryFor(MetadataTables.MethodSpec, index)); break; // Type related tokens case ILMetadataToken.TypeDef: returnItem = map.GetDefinition(MetadataTables.TypeDef, metadataStream.GetEntryFor(MetadataTables.TypeDef, index)); break; case ILMetadataToken.TypeRef: returnItem = map.GetDefinition(MetadataTables.TypeRef, metadataStream.GetEntryFor(MetadataTables.TypeRef, index)); break; case ILMetadataToken.TypeSpec: returnItem = map.GetDefinition(MetadataTables.TypeSpec, metadataStream.GetEntryFor(MetadataTables.TypeSpec, index)); break; case ILMetadataToken.FieldDef: returnItem = map.GetDefinition(MetadataTables.Field, metadataStream.GetEntryFor(MetadataTables.Field, index)); break; } return(returnItem); }
public AssemblyDefBuilder(PeCoffFile peCoffFile) { if (peCoffFile == null) { throw new ArgumentNullException(nameof(peCoffFile)); } if (!peCoffFile.Directories.ContainsKey(DataDirectories.CommonLanguageRuntimeHeader)) { throw new NotAManagedLibraryException($"The file '{peCoffFile.FileName}' is not a managed library."); } _peCoffFile = peCoffFile; _map = _peCoffFile.Map; _references = new BuildReferences(); _references.Map = _map; _references.PeCoffFile = _peCoffFile; _references.Metadata = _peCoffFile.GetMetadataDirectory(); }
public AssemblyDef Build() { if (_assembly != null) { return(_assembly); // we have already built it return previous } _assembly = new AssemblyDef(_peCoffFile); _references.Assembly = _assembly; _map.Assembly = _assembly; // Read the metadata from the file and populate the entries _metadata = _peCoffFile.GetMetadataDirectory(); _stream = _metadata.Streams[Streams.MetadataStream] as MetadataStream; _assembly.StringStream = _metadata.Streams[Streams.StringStream] as IStringStream; // needs to be populated first LoadAssemblyMetadata(); LoadAssemblyRefMetadata(); LoadModuleMetadata(); LoadTypeRefMetadata(); LoadTypeDefMetadata(); LoadMemberRefMetadata(); LoadTypeSpecMetadata(); LoadNestedClassMetadata(); LoadInterfaceImplMetadata(); LoadConstantMetadata(); LoadCustomAttributeMetadata(); // assign the built assembly locally and clear up the unused references _peCoffFile = null; _map = null; _metadata = null; _stream = null; return(_assembly); }