diff options
author | Jb Evain <jb@evain.net> | 2015-04-25 23:30:26 +0300 |
---|---|---|
committer | Jb Evain <jb@evain.net> | 2015-04-25 23:30:26 +0300 |
commit | 1e03c149f65397e7e494cfdc5c0af0104af6b741 (patch) | |
tree | 0f2e58ce62ae5a5ae16d75b075e25ee7bb038644 /Mono.Cecil.PE | |
parent | f9ebd0245249dcb76d15e14871226cfee839df4e (diff) |
GetReaderAt can return null if RVA can not be resolved
Diffstat (limited to 'Mono.Cecil.PE')
-rw-r--r-- | Mono.Cecil.PE/Image.cs | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/Mono.Cecil.PE/Image.cs b/Mono.Cecil.PE/Image.cs index cf2d7bb..e67fffe 100644 --- a/Mono.Cecil.PE/Image.cs +++ b/Mono.Cecil.PE/Image.cs @@ -119,14 +119,22 @@ namespace Mono.Cecil.PE { public BinaryStreamReader GetReaderAt (RVA rva) { + var section = GetSectionAtVirtualAddress (rva); + if (section == null) + return null; + var reader = new BinaryStreamReader (Stream); - reader.MoveTo (ResolveVirtualAddress (rva)); + reader.MoveTo (ResolveVirtualAddressInSection (rva, section)); return reader; } public ImageDebugDirectory GetDebugHeader (out byte [] header) { var reader = GetReaderAt (Debug.VirtualAddress); + if (reader == null) { + header = Empty<byte>.Array; + return new ImageDebugDirectory (); + } var directory = new ImageDebugDirectory { Characteristics = reader.ReadInt32 (), @@ -140,7 +148,10 @@ namespace Mono.Cecil.PE { }; reader = GetReaderAt ((uint) directory.AddressOfRawData); - header = reader.ReadBytes (directory.SizeOfData); + header = reader != null + ? reader.ReadBytes (directory.SizeOfData) + : Empty<byte>.Array; + return directory; } |