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
} }
} }
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.Kind = kind;
this.FileName = fileName; this.FileName = fileName;
this.Metadata = metadata.GetMetadataReader(metadataOptions); this.Metadata = metadata.GetMetadataReader(metadataOptions, utf8Decoder);
this.MetadataOffset = metadataOffset; this.MetadataOffset = metadataOffset;
this.IsEmbedded = isEmbedded; 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.Kind = kind;
this.FileName = fileName ?? throw new ArgumentNullException(nameof(fileName)); this.FileName = fileName ?? throw new ArgumentNullException(nameof(fileName));
_ = reader ?? throw new ArgumentNullException(nameof(reader)); _ = reader ?? throw new ArgumentNullException(nameof(reader));
if (!reader.HasMetadata) if (!reader.HasMetadata)
throw new MetadataFileNotSupportedException("PE file does not contain any managed metadata."); 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) public virtual MethodBodyBlock GetMethodBody(int rva)

12
ICSharpCode.Decompiler/Metadata/PEFile.cs

@ -35,18 +35,18 @@ namespace ICSharpCode.Decompiler.Metadata
{ {
public PEReader Reader { get; } public PEReader Reader { get; }
public PEFile(string fileName, PEStreamOptions streamOptions = PEStreamOptions.Default, MetadataReaderOptions metadataOptions = MetadataReaderOptions.Default) 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) : 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) public PEFile(string fileName, Stream stream, PEStreamOptions streamOptions = PEStreamOptions.Default, MetadataReaderOptions metadataOptions = MetadataReaderOptions.Default, MetadataStringDecoder? utf8Decoder = null)
: this(fileName, new PEReader(stream, streamOptions), metadataOptions) : this(fileName, new PEReader(stream, streamOptions), metadataOptions, utf8Decoder)
{ {
} }
public PEFile(string fileName, PEReader reader, MetadataReaderOptions metadataOptions = MetadataReaderOptions.Default) public PEFile(string fileName, PEReader reader, MetadataReaderOptions metadataOptions = MetadataReaderOptions.Default, MetadataStringDecoder? utf8Decoder = null)
: base(MetadataFileKind.PortableExecutable, fileName, reader, metadataOptions) : base(MetadataFileKind.PortableExecutable, fileName, reader, metadataOptions, utf8Decoder)
{ {
this.Reader = reader; this.Reader = reader;
} }

Loading…
Cancel
Save