コード例 #1
0
 public void EditFind()
 {
     using (ISearchDialog dlg = dlgFactory.CreateSearchDialog())
     {
         if (uiSvc.ShowModalDialog(dlg) == DialogResult.OK)
         {
             Func <int, Program, bool> filter = GetScannedFilter(dlg);
             var re = Core.Dfa.Automaton.CreateFromPattern(dlg.Patterns.Text);
             if (re == null)
             {
                 return;
             }
             var hits = this.decompilerSvc.Decompiler.Project.Programs
                        .SelectMany(program =>
                                    program.SegmentMap.Segments.Values.SelectMany(seg =>
             {
                 var linBaseAddr = seg.MemoryArea.BaseAddress.ToLinear();
                 return(re.GetMatches(
                            seg.MemoryArea.Bytes,
                            0,
                            (int)seg.MemoryArea.Length)
                        .Where(o => filter(o, program))
                        .Select(offset => new AddressSearchHit
                 {
                     Program = program,
                     Address = program.SegmentMap.MapLinearAddressToAddress(
                         linBaseAddr + (ulong)offset)
                 }));
             }));
             srSvc.ShowAddressSearchResults(hits, new CodeSearchDetails());
         }
     }
 }
コード例 #2
0
ファイル: MainFormInteractor.cs プロジェクト: mmyydd/reko
 public void EditFind()
 {
     using (ISearchDialog dlg = dlgFactory.CreateSearchDialog())
     {
         if (uiSvc.ShowModalDialog(dlg) == DialogResult.OK)
         {
             Func <int, Program, bool> filter = GetScannedFilter(dlg);
             var re = Scanning.Dfa.Automaton.CreateFromPattern(dlg.Patterns.Text);
             if (re == null)
             {
                 return;
             }
             var hits = this.decompilerSvc.Decompiler.Project.Programs
                        .SelectMany(program =>
                                    re.GetMatches(program.Image.Bytes, 0)
                                    .Where(o => filter(o, program))
                                    .Select(offset => new AddressSearchHit
             {
                 Program = program,
                 Address = program.Image.BaseAddress + offset
             }));
             srSvc.ShowSearchResults(new AddressSearchResult(
                                         this.sc,
                                         hits));
         }
     }
 }
コード例 #3
0
 public void EditFind()
 {
     using (ISearchDialog dlg = dlgFactory.CreateSearchDialog())
     {
         if (uiSvc.ShowModalDialog(dlg) == DialogResult.OK)
         {
             Func <int, Program, bool> filter = GetScannedFilter(dlg);
             var re = Scanning.Dfa.Automaton.CreateFromPattern(dlg.Patterns.Text);
             if (re == null)
             {
                 return;
             }
             var hits = this.decompilerSvc.Decompiler.Project.Programs
                        .SelectMany(program =>
                                    program.ImageMap.Segments.Values.SelectMany(seg =>
             {
                 var segOffset = (int)(seg.Address - program.Image.BaseAddress);
                 return(re.GetMatches(
                            program.Image.Bytes,
                            segOffset,
                            segOffset + (int)seg.Size)
                        .Where(o => filter(o, program))
                        .Select(offset => new ProgramAddress(
                                    program,
                                    program.ImageMap.MapLinearAddressToAddress(
                                        program.Image.BaseAddress.ToLinear() + (ulong)offset))));
             }));
             srSvc.ShowAddressSearchResults(hits, AddressSearchDetails.Code);
         }
     }
 }
コード例 #4
0
 public void EditFind()
 {
     using (ISearchDialog dlg = dlgFactory.CreateSearchDialog())
     {
         if (uiSvc.ShowModalDialog(dlg) == DialogResult.OK)
         {
             Func <int, Program, bool> filter = GetScannedFilter(dlg);
             var re = Core.Dfa.Automaton.CreateFromPattern(dlg.Patterns.Text);
             if (re == null)
             {
                 return;
             }
             var hits = this.decompilerSvc.Decompiler.Project.Programs
                        .SelectMany(program =>
                                    program.SegmentMap.Segments.Values.SelectMany(seg =>
             {
                 return(ReMatches(program, seg, filter, re));
             }));
             srSvc.ShowAddressSearchResults(hits, new CodeSearchDetails());
         }
     }
 }