diff --git a/Reactor.OxygenFilter.MSBuild/Reactor.OxygenFilter.MSBuild.csproj b/Reactor.OxygenFilter.MSBuild/Reactor.OxygenFilter.MSBuild.csproj index c9c9705..b606e5e 100644 --- a/Reactor.OxygenFilter.MSBuild/Reactor.OxygenFilter.MSBuild.csproj +++ b/Reactor.OxygenFilter.MSBuild/Reactor.OxygenFilter.MSBuild.csproj @@ -4,7 +4,7 @@ latest true - 0.2.5 + 0.2.6 git https://github.com/NuclearPowered/Reactor.OxygenFilter LGPL-3.0-or-later diff --git a/Reactor.OxygenFilter.MSBuild/Reobfuscate.cs b/Reactor.OxygenFilter.MSBuild/Reobfuscate.cs index cb09524..e15fb8a 100644 --- a/Reactor.OxygenFilter.MSBuild/Reobfuscate.cs +++ b/Reactor.OxygenFilter.MSBuild/Reobfuscate.cs @@ -229,7 +229,8 @@ namespace Reactor.OxygenFilter.MSBuild } // get same method from obfuscated assembly - MethodReference definition = typeDefinition.GetMethods().Single(x => x.Name == obfuscated); + var signature = deobfuscatedCall.GetSignature(t => GetObfuscated(t) ?? t.FullName); + MethodReference definition = typeDefinition.GetMethods().Single(x => x.Name == obfuscated && x.GetSignature() == signature); // obfuscate generics if (deobfuscatedCallReference is GenericInstanceMethod generic) diff --git a/Reactor.OxygenFilter/Extensions.cs b/Reactor.OxygenFilter/Extensions.cs index 33dfcca..284366c 100644 --- a/Reactor.OxygenFilter/Extensions.cs +++ b/Reactor.OxygenFilter/Extensions.cs @@ -1,3 +1,4 @@ +using System; using System.Linq; using System.Text; using Mono.Cecil; @@ -11,11 +12,29 @@ namespace Reactor.OxygenFilter return text.Length == 11 && text.All(char.IsUpper); } - public static string GetSignature(this MethodDefinition methodDefinition) + public static string GetSignature(this MethodDefinition methodDefinition, Func map = null) { + map ??= provider => provider.FullName; + + string MapIfResolved(TypeReference typeReference) + { + TypeDefinition resolved = null; + + try + { + resolved = typeReference.Resolve(); + } + catch + { + // ignored + } + + return resolved != null ? map(resolved) : typeReference.FullName; + } + var sb = new StringBuilder(); - sb.Append(methodDefinition.ReturnType.FullName); + sb.Append(MapIfResolved(methodDefinition.ReturnType)); sb.Append(" "); sb.Append("("); @@ -31,7 +50,7 @@ namespace Reactor.OxygenFilter if (parameterType is SentinelType) sb.Append("...,"); - sb.Append(parameterType.FullName); + sb.Append(MapIfResolved(parameterType)); } }