From 3bd00c99bc248af6b4112a82c164fe49192b9f11 Mon Sep 17 00:00:00 2001 From: de4dot Date: Tue, 13 Nov 2012 07:42:35 +0100 Subject: [PATCH] Use NativeModuleWriterOptions when saving a mixed-mode assembly --- de4dot.code/AssemblyModule.cs | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/de4dot.code/AssemblyModule.cs b/de4dot.code/AssemblyModule.cs index 4c54e359..90304ef6 100644 --- a/de4dot.code/AssemblyModule.cs +++ b/de4dot.code/AssemblyModule.cs @@ -52,13 +52,24 @@ namespace de4dot.code { } public void save(string newFilename, bool preserveTokens, bool updateMaxStack, IModuleWriterListener writerListener) { - var writerOptions = new ModuleWriterOptions(module, writerListener); + MetaDataFlags mdFlags = 0; if (!updateMaxStack) - writerOptions.MetaDataOptions.Flags |= MetaDataFlags.KeepOldMaxStack; + mdFlags |= MetaDataFlags.KeepOldMaxStack; if (preserveTokens) - writerOptions.MetaDataOptions.Flags |= MetaDataFlags.PreserveTokens | MetaDataFlags.PreserveUSOffsets | MetaDataFlags.PreserveExtraSignatureData; - writerOptions.Logger = Logger.Instance; - module.Write(newFilename, writerOptions); + mdFlags |= MetaDataFlags.PreserveTokens | MetaDataFlags.PreserveUSOffsets | MetaDataFlags.PreserveExtraSignatureData; + + if (module.IsILOnly) { + var writerOptions = new ModuleWriterOptions(module, writerListener); + writerOptions.MetaDataOptions.Flags |= mdFlags; + writerOptions.Logger = Logger.Instance; + module.Write(newFilename, writerOptions); + } + else { + var writerOptions = new NativeModuleWriterOptions(module, writerListener); + writerOptions.MetaDataOptions.Flags |= mdFlags; + writerOptions.Logger = Logger.Instance; + module.NativeWrite(newFilename, writerOptions); + } } public ModuleDefMD reload(byte[] newModuleData, DumpedMethodsRestorer dumpedMethodsRestorer, IStringDecrypter stringDecrypter) {