Merge branch 'master' into confuser

This commit is contained in:
de4dot 2013-09-27 04:49:41 +02:00
commit a2ee0eb08f
5 changed files with 24 additions and 10 deletions

View File

@ -181,6 +181,10 @@ namespace de4dot.code.deobfuscators {
} }
public virtual void DeobfuscateEnd() { public virtual void DeobfuscateEnd() {
// Make sure the TypeDefCache isn't enabled while we modify types or remove stuff
bool cacheState = module.EnableTypeDefFindCache;
module.EnableTypeDefFindCache = false;
if (CanRemoveTypes) { if (CanRemoveTypes) {
RemoveTypesWithInvalidBaseTypes(); RemoveTypesWithInvalidBaseTypes();
@ -195,6 +199,8 @@ namespace de4dot.code.deobfuscators {
RestoreBaseType(); RestoreBaseType();
FixMDHeaderVersion(); FixMDHeaderVersion();
module.EnableTypeDefFindCache = cacheState;
} }
static bool IsTypeWithInvalidBaseType(TypeDef moduleType, TypeDef type) { static bool IsTypeWithInvalidBaseType(TypeDef moduleType, TypeDef type) {

View File

@ -1232,6 +1232,8 @@ namespace de4dot.code.renamer {
} }
} }
var overrideMethod = method.MethodDef.Overrides[0].MethodDeclaration; var overrideMethod = method.MethodDef.Overrides[0].MethodDeclaration;
if (overrideMethod.DeclaringType == null)
return "";
var name = overrideMethod.DeclaringType.FullName.Replace('/', '.'); var name = overrideMethod.DeclaringType.FullName.Replace('/', '.');
name = removeGenericsArityRegex.Replace(name, ""); name = removeGenericsArityRegex.Replace(name, "");
return name + "."; return name + ".";

View File

@ -227,9 +227,7 @@ namespace de4dot.code.renamer.asmmodules {
} }
types = newTypes; types = newTypes;
bool old = ModuleDefMD.EnableTypeDefFindCache; ModuleDefMD.ResetTypeDefFindCache();
ModuleDefMD.EnableTypeDefFindCache = false;
ModuleDefMD.EnableTypeDefFindCache = old;
} }
static ITypeDefOrRef GetNonGenericTypeRef(ITypeDefOrRef typeRef) { static ITypeDefOrRef GetNonGenericTypeRef(ITypeDefOrRef typeRef) {

View File

@ -61,18 +61,26 @@ namespace de4dot.code.renamer.asmmodules {
moduleHash.Add(module); moduleHash.Add(module);
} }
string GetModuleKey(Module module) { static string GetModuleKey(Module module) {
if (module.ModuleDefMD.Assembly != null) if (module.ModuleDefMD.Assembly != null)
return module.ModuleDefMD.Assembly.ToString(); return GetAssemblyName(module.ModuleDefMD.Assembly);
return Utils.GetBaseName(module.ModuleDefMD.Location); return Utils.GetBaseName(module.ModuleDefMD.Location);
} }
public ModuleHash Lookup(string assemblyName) { public ModuleHash Lookup(IAssembly asm) {
ModuleHash moduleHash; ModuleHash moduleHash;
if (assemblyHash.TryGetValue(assemblyName, out moduleHash)) if (assemblyHash.TryGetValue(GetAssemblyName(asm), out moduleHash))
return moduleHash; return moduleHash;
return null; return null;
} }
static string GetAssemblyName(IAssembly asm) {
if (asm == null)
return string.Empty;
if (PublicKeyBase.IsNullOrEmpty2(asm.PublicKeyOrToken))
return asm.Name;
return asm.FullName;
}
} }
class ModuleHash { class ModuleHash {
@ -402,7 +410,7 @@ namespace de4dot.code.renamer.asmmodules {
var asm = type.Module.Assembly; var asm = type.Module.Assembly;
if (asm == null) if (asm == null)
return null; return null;
var moduleHash = assemblyHash.Lookup(asm.FullName); var moduleHash = assemblyHash.Lookup(asm);
if (moduleHash == null) if (moduleHash == null)
return null; return null;
var module = moduleHash.Lookup(scope.ScopeName); var module = moduleHash.Lookup(scope.ScopeName);
@ -415,7 +423,7 @@ namespace de4dot.code.renamer.asmmodules {
} }
IEnumerable<Module> FindModules(AssemblyRef assemblyRef) { IEnumerable<Module> FindModules(AssemblyRef assemblyRef) {
var moduleHash = assemblyHash.Lookup(assemblyRef.FullName); var moduleHash = assemblyHash.Lookup(assemblyRef);
if (moduleHash != null) if (moduleHash != null)
return moduleHash.Modules; return moduleHash.Modules;
return null; return null;

2
dnlib

@ -1 +1 @@
Subproject commit 68457d32d7c789e24be211cfded8ec1029ea985b Subproject commit 29c5bfd1e57ea8041034cce69e8b741613126a52