Move disposing of module to caller

The reason is that some deobfuscators require it to be non-disposed
when their reload() method is called.
This commit is contained in:
de4dot 2012-11-18 07:32:57 +01:00
parent 9a8218e68f
commit 2e61a8a757
2 changed files with 14 additions and 4 deletions

View File

@ -44,8 +44,6 @@ namespace de4dot.code {
}
ModuleDefMD setModule(ModuleDefMD newModule) {
if (module != null)
module.Dispose();
module = newModule;
TheAssemblyResolver.Instance.addModule(module);
module.EnableTypeDefFindCache = true;

View File

@ -171,6 +171,7 @@ namespace de4dot.code {
}
void loadModule(IEnumerable<IDeobfuscator> deobfuscators) {
ModuleDefMD oldModule = module;
try {
module = assemblyModule.load();
}
@ -179,6 +180,10 @@ namespace de4dot.code {
throw new BadImageFormatException();
Logger.v("Unpacked native file");
}
finally {
if (oldModule != null)
oldModule.Dispose();
}
}
bool unpackNativeImage(IEnumerable<IDeobfuscator> deobfuscators) {
@ -194,6 +199,7 @@ namespace de4dot.code {
if (unpackedData == null)
continue;
var oldModule = module;
try {
module = assemblyModule.load(unpackedData);
}
@ -201,6 +207,10 @@ namespace de4dot.code {
Logger.w("Could not load unpacked data. File: {0}, deobfuscator: {0}", peImage.FileName ?? "(unknown filename)", deob.TypeLong);
continue;
}
finally {
if (oldModule != null)
oldModule.Dispose();
}
this.deob = deob;
return true;
}
@ -372,8 +382,10 @@ namespace de4dot.code {
void reloadModule(byte[] newModuleData, DumpedMethods dumpedMethods) {
Logger.v("Reloading decrypted assembly (original filename: {0})", Filename);
simpleDeobfuscatorFlags.Clear();
module = assemblyModule.reload(newModuleData, createDumpedMethodsRestorer(dumpedMethods), deob as IStringDecrypter);
deob = deob.moduleReloaded(module);
using (var oldModule = module) {
module = assemblyModule.reload(newModuleData, createDumpedMethodsRestorer(dumpedMethods), deob as IStringDecrypter);
deob = deob.moduleReloaded(module);
}
initializeDeobfuscator();
deob.DeobfuscatedFile = this;
updateDynamicStringInliner();