예제 #1
0
            public override void Write(StackTraceUnobfuscationResult res, Version target, Stream stream)
            {
                using (var writer = new StreamWriter(stream, Encoding.UTF8, 2048, true))
                {
                    foreach (var frame in res.StackFrames)
                    {
                        var alternatives = frame.Alternatives;
                        var best         = alternatives.FirstOrDefault();

                        if (best == null)
                        {
                            writer.WriteLine($"{frame.InputStackLine}?");
                        }
                        else
                        {
                            if (VersionUtils.NumEqual(best.VersionNumber, target) >= 3)
                            {
                                writer.WriteLine(best.Unfuscated);
                            }
                            else
                            {
                                writer.WriteLine(best.Unfuscated + "(v" + alternatives[0].Version + ")");
                            }
                        }
                    }
                }
            }
예제 #2
0
 public StackTraceUnobfuscationResult Unfuscate(string stacktrace, Version target = null)
 {
     var lines = stacktrace.Split('\n').Select(l => l.Trim()).Where(l => !string.IsNullOrEmpty(l));
     List<StackFrameUnobfuscationResult> frames = new List<StackFrameUnobfuscationResult>();
     foreach (var line in lines)
     {
         var sig = Signature.ParseStackTraceLine(line);
         frames.Add(new StackFrameUnobfuscationResult(sig, mappingDb.Get(sig).OrderByDescending(r => VersionUtils.NumEqual(r.VersionNumber, target))));
     }
     return new StackTraceUnobfuscationResult(frames);
 }