diff options
Diffstat (limited to 'Mono.Cecil.PE/ImageWriter.cs')
-rw-r--r-- | Mono.Cecil.PE/ImageWriter.cs | 34 |
1 files changed, 19 insertions, 15 deletions
diff --git a/Mono.Cecil.PE/ImageWriter.cs b/Mono.Cecil.PE/ImageWriter.cs index 0648f59..a8a3fa8 100644 --- a/Mono.Cecil.PE/ImageWriter.cs +++ b/Mono.Cecil.PE/ImageWriter.cs @@ -48,9 +48,7 @@ namespace Mono.Cecil.PE { ushort sections; - internal long debug_header_entries_position; - - ImageWriter (ModuleDefinition module, string runtime_version, MetadataBuilder metadata, Disposable<Stream> stream, bool metadataOnly = false, ImageDebugHeader debugHeader = null) + ImageWriter (ModuleDefinition module, string runtime_version, MetadataBuilder metadata, Disposable<Stream> stream, bool metadataOnly = false) : base (stream.value) { this.module = module; @@ -63,18 +61,26 @@ namespace Mono.Cecil.PE { this.pe64 = module.Architecture == TargetArchitecture.AMD64 || module.Architecture == TargetArchitecture.IA64 || module.Architecture == TargetArchitecture.ARM64; this.has_reloc = module.Architecture == TargetArchitecture.I386; + this.GetDebugHeader (); this.GetWin32Resources (); + this.BuildTextMap (); + this.sections = (ushort) (has_reloc ? 2 : 1); // text + reloc? + } + + void GetDebugHeader () + { + var symbol_writer = metadata.symbol_writer; + if (symbol_writer != null) + debug_header = symbol_writer.GetDebugHeader (); - debug_header = debugHeader; if (module.HasDebugHeader) { var header = module.GetDebugHeader (); var deterministic = header.GetDeterministicEntry (); - if (deterministic != null) - debug_header = debug_header.AddDeterministicEntry (); - } + if (deterministic == null) + return; - this.BuildTextMap (); - this.sections = (ushort)(has_reloc ? 2 : 1); // text + reloc? + debug_header = debug_header.AddDeterministicEntry (); + } } void GetWin32Resources () @@ -90,9 +96,9 @@ namespace Mono.Cecil.PE { } } - public static ImageWriter CreateWriter (ModuleDefinition module, MetadataBuilder metadata, Disposable<Stream> stream, ImageDebugHeader debugHeader) + public static ImageWriter CreateWriter (ModuleDefinition module, MetadataBuilder metadata, Disposable<Stream> stream) { - var writer = new ImageWriter (module, module.runtime_version, metadata, stream, metadataOnly: false, debugHeader: debugHeader); + var writer = new ImageWriter (module, module.runtime_version, metadata, stream); writer.BuildSections (); return writer; } @@ -373,7 +379,7 @@ namespace Mono.Cecil.PE { BaseStream.Seek (GetRVAFileOffset (section, rva), SeekOrigin.Begin); } - internal void MoveToRVA (TextSegment segment) + void MoveToRVA (TextSegment segment) { MoveToRVA (text, text_map.GetRVA (segment)); } @@ -594,9 +600,7 @@ namespace Mono.Cecil.PE { data_start += entry.Data.Length; } - - debug_header_entries_position = BaseStream.Position; - + for (var i = 0; i < debug_header.Entries.Length; i++) { var entry = debug_header.Entries [i]; WriteBytes (entry.Data); |