Netmodules are better supported now

This commit is contained in:
de4dot 2011-10-05 08:20:32 +02:00
parent 15c715e312
commit d2b621b5b3
7 changed files with 27 additions and 14 deletions

View File

@ -49,7 +49,7 @@ namespace AssemblyData.methodsrewriter {
static MModule getModule(AssemblyNameReference assemblyRef) {
foreach (var mm in modules.Values) {
var asm = mm.moduleDefinition.Assembly;
if (asm.Name.FullName == assemblyRef.FullName)
if (asm != null && asm.Name.FullName == assemblyRef.FullName)
return mm;
}
return null;

View File

@ -429,6 +429,8 @@ namespace de4dot.blocks {
public static IEnumerable<CustomAttribute> findAttributes(AssemblyDefinition asm, TypeReference attr) {
var list = new List<CustomAttribute>();
if (asm == null)
return list;
foreach (var cattr in asm.CustomAttributes) {
if (MemberReferenceHelper.compareTypes(attr, cattr.AttributeType))
list.Add(cattr);

View File

@ -45,7 +45,7 @@ namespace de4dot {
}
public void save(string newFilename) {
module.Assembly.Write(newFilename);
module.Write(newFilename);
}
void readMethodsFile() {

View File

@ -41,15 +41,17 @@ namespace de4dot {
}
public void addModule(ModuleDefinition module) {
var assembly = module.Assembly;
var name = assembly.Name.FullName;
if (!addedAssemblies.ContainsKey(name) && cache.ContainsKey(name))
throw new ApplicationException(string.Format("Assembly {0} was loaded by other code.", name));
addedAssemblies[name] = true;
var dir = Path.GetDirectoryName(module.FullyQualifiedName);
addSearchDirectory(dir);
RegisterAssembly(assembly);
var assembly = module.Assembly;
if (assembly != null) {
var name = assembly.Name.FullName;
if (!addedAssemblies.ContainsKey(name) && cache.ContainsKey(name))
throw new ApplicationException(string.Format("Assembly {0} was loaded by other code.", name));
addedAssemblies[name] = true;
RegisterAssembly(assembly);
}
}
}
}

View File

@ -287,7 +287,8 @@ namespace de4dot.deobfuscators {
Log.v("Removing custom attributes");
Log.indent();
deleteCustomAttributes(module.CustomAttributes);
deleteCustomAttributes(module.Assembly.CustomAttributes);
if (module.Assembly != null)
deleteCustomAttributes(module.Assembly.CustomAttributes);
Log.deIndent();
}
@ -312,7 +313,8 @@ namespace de4dot.deobfuscators {
Log.v("Removing other attributes");
Log.indent();
deleteOtherAttributes(module.CustomAttributes);
deleteOtherAttributes(module.Assembly.CustomAttributes);
if (module.Assembly != null)
deleteOtherAttributes(module.Assembly.CustomAttributes);
Log.deIndent();
}

View File

@ -41,12 +41,18 @@ namespace de4dot.renamer {
public void add(Module module) {
ModuleHash moduleHash;
var key = module.ModuleDefinition.Assembly.ToString();
var key = getModuleKey(module);
if (!assemblyHash.TryGetValue(key, out moduleHash))
assemblyHash[key] = moduleHash = new ModuleHash();
moduleHash.add(module);
}
string getModuleKey(Module module) {
if (module.ModuleDefinition.Assembly != null)
return module.ModuleDefinition.Assembly.ToString();
return Utils.getBaseName(module.ModuleDefinition.FullyQualifiedName);
}
public ModuleHash lookup(string assemblyName) {
ModuleHash moduleHash;
if (assemblyHash.TryGetValue(assemblyName, out moduleHash))
@ -60,7 +66,8 @@ namespace de4dot.renamer {
Module mainModule = null;
public void add(Module module) {
if (ReferenceEquals(module.ModuleDefinition.Assembly.MainModule, module.ModuleDefinition)) {
var asm = module.ModuleDefinition.Assembly;
if (asm != null && ReferenceEquals(asm.MainModule, module.ModuleDefinition)) {
if (mainModule != null)
throw new UserException(string.Format("Two modules in the same assembly are main modules. If 32-bit vs 64-bit, don't use both assemblies at the same time! \"{0}\" and \"{1}\"", module.ModuleDefinition.FullyQualifiedName, mainModule.ModuleDefinition.FullyQualifiedName));
mainModule = module;

View File

@ -111,7 +111,7 @@ namespace de4dot {
void addModule(ModuleDefinition module) {
pushMember(module.EntryPoint);
access(() => addCustomAttributes(module.CustomAttributes));
if (module == module.Assembly.MainModule) {
if (module.Assembly != null && module == module.Assembly.MainModule) {
var asm = module.Assembly;
access(() => addCustomAttributes(asm.CustomAttributes));
addSecurityDeclarations(asm.SecurityDeclarations);