/// <summary> /// Creates a new managed PE file builder context. /// </summary> /// <param name="image">The image to build.</param> public ManagedPEBuilderContext(IPEImage image) { ImportDirectory = new ImportDirectoryBuffer(image.PEKind == OptionalHeaderMagic.Pe32); ExportDirectory = new ExportDirectoryBuffer(); DotNetSegment = new DotNetSegmentBuffer(image.DotNetDirectory); ResourceDirectory = new ResourceDirectoryBuffer(); RelocationsDirectory = new RelocationsDirectoryBuffer(); FieldRvaDataReader = new FieldRvaDataReader(); Bootstrapper = CreateBootstrapper(image); }
public void ReadByteArray() { // Open image. var image = PEImage.FromFile(typeof(InitialValues).Assembly.Location); var metadata = image.DotNetDirectory.Metadata; // Get token of field. var cctorToken = (MetadataToken)typeof(InitialValues) .TypeInitializer .MetadataToken; var fieldToken = (MetadataToken)typeof(InitialValues) .GetField(nameof(InitialValues.ByteArray)) .MetadataToken; // Find associated field rva row. var fieldRvaRow = FindFieldRvaRow(metadata.GetStream <TablesStream>(), cctorToken, fieldToken); // Read the data. var dataReader = new FieldRvaDataReader(); var segment = dataReader.ResolveFieldData(ThrowErrorListener.Instance, metadata, fieldRvaRow) as IReadableSegment; Assert.NotNull(segment); Assert.Equal(InitialValues.ByteArray, segment.ToArray()); }