Browse Source

Allow creating a MetadataFile with a MetadataReader / MetadataStringDecoder

pull/3487/head
lordmilko 3 weeks ago committed by Siegfried Pammer
parent
commit
bbadfca99b
  1. 17
      ICSharpCode.Decompiler/Metadata/MetadataFile.cs
  2. 12
      ICSharpCode.Decompiler/Metadata/PEFile.cs

17
ICSharpCode.Decompiler/Metadata/MetadataFile.cs

@ -239,23 +239,32 @@ namespace ICSharpCode.Decompiler.Metadata @@ -239,23 +239,32 @@ namespace ICSharpCode.Decompiler.Metadata
}
}
public MetadataFile(MetadataFileKind kind, string fileName, MetadataReaderProvider metadata, MetadataReaderOptions metadataOptions = MetadataReaderOptions.Default, int metadataOffset = 0, bool isEmbedded = false)
public MetadataFile(MetadataFileKind kind, string fileName, MetadataReaderProvider metadata, MetadataReaderOptions metadataOptions = MetadataReaderOptions.Default, int metadataOffset = 0, bool isEmbedded = false, MetadataStringDecoder? utf8Decoder = null)
{
this.Kind = kind;
this.FileName = fileName;
this.Metadata = metadata.GetMetadataReader(metadataOptions);
this.Metadata = metadata.GetMetadataReader(metadataOptions, utf8Decoder);
this.MetadataOffset = metadataOffset;
this.IsEmbedded = isEmbedded;
}
private protected MetadataFile(MetadataFileKind kind, string fileName, PEReader reader, MetadataReaderOptions metadataOptions = MetadataReaderOptions.Default)
public MetadataFile(MetadataFileKind kind, string fileName, MetadataReader metadataReader, MetadataReaderOptions metadataOptions = MetadataReaderOptions.Default, int metadataOffset = 0, bool isEmbedded = false)
{
this.Kind = kind;
this.FileName = fileName;
this.Metadata = metadataReader;
this.MetadataOffset = metadataOffset;
this.IsEmbedded = isEmbedded;
}
private protected MetadataFile(MetadataFileKind kind, string fileName, PEReader reader, MetadataReaderOptions metadataOptions = MetadataReaderOptions.Default, MetadataStringDecoder? utf8Decoder = null)
{
this.Kind = kind;
this.FileName = fileName ?? throw new ArgumentNullException(nameof(fileName));
_ = reader ?? throw new ArgumentNullException(nameof(reader));
if (!reader.HasMetadata)
throw new MetadataFileNotSupportedException("PE file does not contain any managed metadata.");
this.Metadata = reader.GetMetadataReader(metadataOptions);
this.Metadata = reader.GetMetadataReader(metadataOptions, utf8Decoder);
}
public virtual MethodBodyBlock GetMethodBody(int rva)

12
ICSharpCode.Decompiler/Metadata/PEFile.cs

@ -35,18 +35,18 @@ namespace ICSharpCode.Decompiler.Metadata @@ -35,18 +35,18 @@ namespace ICSharpCode.Decompiler.Metadata
{
public PEReader Reader { get; }
public PEFile(string fileName, PEStreamOptions streamOptions = PEStreamOptions.Default, MetadataReaderOptions metadataOptions = MetadataReaderOptions.Default)
: this(fileName, new PEReader(new FileStream(fileName, FileMode.Open, FileAccess.Read), streamOptions), metadataOptions)
public PEFile(string fileName, PEStreamOptions streamOptions = PEStreamOptions.Default, MetadataReaderOptions metadataOptions = MetadataReaderOptions.Default, MetadataStringDecoder? utf8Decoder = null)
: this(fileName, new PEReader(new FileStream(fileName, FileMode.Open, FileAccess.Read), streamOptions), metadataOptions, utf8Decoder)
{
}
public PEFile(string fileName, Stream stream, PEStreamOptions streamOptions = PEStreamOptions.Default, MetadataReaderOptions metadataOptions = MetadataReaderOptions.Default)
: this(fileName, new PEReader(stream, streamOptions), metadataOptions)
public PEFile(string fileName, Stream stream, PEStreamOptions streamOptions = PEStreamOptions.Default, MetadataReaderOptions metadataOptions = MetadataReaderOptions.Default, MetadataStringDecoder? utf8Decoder = null)
: this(fileName, new PEReader(stream, streamOptions), metadataOptions, utf8Decoder)
{
}
public PEFile(string fileName, PEReader reader, MetadataReaderOptions metadataOptions = MetadataReaderOptions.Default)
: base(MetadataFileKind.PortableExecutable, fileName, reader, metadataOptions)
public PEFile(string fileName, PEReader reader, MetadataReaderOptions metadataOptions = MetadataReaderOptions.Default, MetadataStringDecoder? utf8Decoder = null)
: base(MetadataFileKind.PortableExecutable, fileName, reader, metadataOptions, utf8Decoder)
{
this.Reader = reader;
}

Loading…
Cancel
Save