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) {