diff --git a/AssemblyData/AssemblyService.cs b/AssemblyData/AssemblyService.cs index fe4bbb4c..f9aba700 100644 --- a/AssemblyData/AssemblyService.cs +++ b/AssemblyData/AssemblyService.cs @@ -83,12 +83,21 @@ namespace AssemblyData { public object[] decryptStrings(int stringDecrypterMethod, object[] args, int callerToken) { checkStringDecrypter(); - var caller = assembly.GetModules()[0].ResolveMethod(callerToken); + var caller = getCaller(callerToken); foreach (var arg in args) SimpleData.unpack((object[])arg); return SimpleData.pack(stringDecrypter.decryptStrings(stringDecrypterMethod, args, caller)); } + MethodBase getCaller(int callerToken) { + try { + return assembly.GetModules()[0].ResolveMethod(callerToken); + } + catch { + return null; + } + } + public void exit() { exitEvent.Set(); } diff --git a/AssemblyData/methodsrewriter/MModule.cs b/AssemblyData/methodsrewriter/MModule.cs index 24031a59..8041bba3 100644 --- a/AssemblyData/methodsrewriter/MModule.cs +++ b/AssemblyData/methodsrewriter/MModule.cs @@ -40,17 +40,21 @@ namespace AssemblyData.methodsrewriter { } void initTokenToType() { - var tmpTokenToType = new Dictionary(); - var tmpTokenToTypeDefinition = new Dictionary(); - foreach (var t in module.GetTypes()) - tmpTokenToType[t.MetadataToken] = t; - foreach (var t in moduleDefinition.GetTypes()) - tmpTokenToTypeDefinition[t.MetadataToken.ToInt32()] = t; moduleType = DotNetUtils.getModuleType(moduleDefinition); - foreach (var token in tmpTokenToType.Keys) { - var mtype = new MType(tmpTokenToType[token], tmpTokenToTypeDefinition[token]); + foreach (var typeDefinition in moduleDefinition.GetTypes()) { + int token = typeDefinition.MetadataToken.ToInt32(); + Type type; + try { + type = module.ResolveType(token); + } + catch { + tokenToType[token] = null; + typeReferenceToType.add(typeDefinition, null); + continue; + } + var mtype = new MType(type, typeDefinition); tokenToType[token] = mtype; - typeReferenceToType.add(mtype.typeDefinition, mtype); + typeReferenceToType.add(typeDefinition, mtype); } } diff --git a/AssemblyData/methodsrewriter/MethodsRewriter.cs b/AssemblyData/methodsrewriter/MethodsRewriter.cs index 20e9bf25..27e6c949 100644 --- a/AssemblyData/methodsrewriter/MethodsRewriter.cs +++ b/AssemblyData/methodsrewriter/MethodsRewriter.cs @@ -165,6 +165,8 @@ namespace AssemblyData.methodsrewriter { } public void setCaller(RewrittenMethod rewrittenMethod, MethodBase caller) { + if (caller == null) + return; var newMethodInfo = getNewMethodInfo(rewrittenMethod.Method.Name); newStackMethodDict[newMethodInfo] = caller; }