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:
parent
9a8218e68f
commit
2e61a8a757
|
@ -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;
|
||||
|
|
|
@ -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();
|
||||
|
|
Loading…
Reference in New Issue
Block a user