Dispose() of all modules we don't need

This commit is contained in:
de4dot 2012-11-18 03:17:53 +01:00
parent 1c4b3a7382
commit 0e16e3e51b
4 changed files with 26 additions and 5 deletions

View File

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

View File

@ -17,13 +17,14 @@
along with de4dot. If not, see <http://www.gnu.org/licenses/>.
*/
using System;
using System.Collections.Generic;
using de4dot.code.deobfuscators;
using dot10.DotNet;
using de4dot.code.renamer;
namespace de4dot.code {
public interface IObfuscatedFile {
public interface IObfuscatedFile : IDisposable {
ModuleDefMD ModuleDefMD { get; }
IDeobfuscator Deobfuscator { get; }
IDeobfuscatorContext DeobfuscatorContext { get; set; }

View File

@ -778,5 +778,13 @@ namespace de4dot.code {
void IDeobfuscatedFile.setDeobfuscator(IDeobfuscator deob) {
this.deob = deob;
}
public void Dispose() {
deobfuscateCleanUp();
if (module != null)
module.Dispose();
module = null;
deob = null;
}
}
}

View File

@ -85,6 +85,7 @@ namespace de4dot.cui {
void detectObfuscators() {
foreach (var file in loadAllFiles(true)) {
removeModule(file.ModuleDefMD);
file.Dispose();
deobfuscatorContext.clear();
}
}
@ -108,7 +109,7 @@ namespace de4dot.cui {
Program.printStackTrace(ex, LoggerEvent.Verbose);
}
finally {
file.deobfuscateCleanUp();
file.Dispose();
Logger.Instance.IndentLevel = oldIndentLevel;
}
}
@ -116,9 +117,17 @@ namespace de4dot.cui {
void deobfuscateAll() {
var allFiles = new List<IObfuscatedFile>(loadAllFiles());
deobfuscateAllFiles(allFiles);
rename(allFiles);
saveAllFiles(allFiles);
try {
deobfuscateAllFiles(allFiles);
rename(allFiles);
saveAllFiles(allFiles);
}
finally {
foreach (var file in allFiles) {
if (file != null)
file.Dispose();
}
}
}
IEnumerable<IObfuscatedFile> loadAllFiles() {
@ -310,6 +319,7 @@ namespace de4dot.cui {
var obfuscatedFile = new ObfuscatedFile(fileOptions, options.ModuleContext, options.AssemblyClientFactory);
if (add(obfuscatedFile, searchDir.SkipUnknownObfuscators, false))
return obfuscatedFile;
obfuscatedFile.Dispose();
return null;
}