Netmodules are better supported now
This commit is contained in:
parent
15c715e312
commit
d2b621b5b3
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -45,7 +45,7 @@ namespace de4dot {
|
|||
}
|
||||
|
||||
public void save(string newFilename) {
|
||||
module.Assembly.Write(newFilename);
|
||||
module.Write(newFilename);
|
||||
}
|
||||
|
||||
void readMethodsFile() {
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue
Block a user