/[RomCheater]/trunk/RomCheater/Docking/UI/UIMemoryViewer.cs
ViewVC logotype

Diff of /trunk/RomCheater/Docking/UI/UIMemoryViewer.cs

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 369 by william, Sun Jun 10 04:20:04 2012 UTC revision 370 by william, Sun Jun 10 05:40:24 2012 UTC
# Line 19  using Sojaner.MemoryScanner; Line 19  using Sojaner.MemoryScanner;
19    
20  namespace RomCheater.Docking.UI  namespace RomCheater.Docking.UI
21  {  {
22      public partial class UIMemoryViewer : UserControl,      public partial class UIMemoryViewer : UserControl,
23          IAcceptsPlugin<IConfigPlugin>,          IAcceptsPlugin<IConfigPlugin>,
24          IAcceptsProcess<Process>,          IAcceptsProcess<Process>,
25          IAcceptsProcessAndConfig,          IAcceptsProcessAndConfig,
# Line 27  namespace RomCheater.Docking.UI Line 27  namespace RomCheater.Docking.UI
27          IBrowseMemoryRegion,          IBrowseMemoryRegion,
28          IAcceptPEData          IAcceptPEData
29      {      {
30    
31            public delegate void SetTextDelegate(string text);
32            public void SetAsciiData(string text)
33            {
34                if (txtAscii.InvokeRequired)
35                {
36                    SetTextDelegate std = new SetTextDelegate(SetAsciiData);
37                    txtAscii.Invoke(std, text);
38                    return;
39                }
40                txtAscii.Text = text;
41            }
42    
43          public UIMemoryViewer()          public UIMemoryViewer()
44          {          {
45              InitializeComponent();              InitializeComponent();
# Line 34  namespace RomCheater.Docking.UI Line 47  namespace RomCheater.Docking.UI
47              SetStyle(ControlStyles.DoubleBuffer, true);              SetStyle(ControlStyles.DoubleBuffer, true);
48              SetStyle(ControlStyles.AllPaintingInWmPaint, true);              SetStyle(ControlStyles.AllPaintingInWmPaint, true);
49              SetStyle(ControlStyles.ResizeRedraw, true);              SetStyle(ControlStyles.ResizeRedraw, true);
50    
51              //this.OnPCSX2ProcessCallback = new UIEvents.PCSX2ProcessCallback(this.PCSX2ProcessCallback);              //this.OnPCSX2ProcessCallback = new UIEvents.PCSX2ProcessCallback(this.PCSX2ProcessCallback);
52              //if (this.OnPCSX2ProcessCallback != null) { this.OnPCSX2ProcessCallback.Invoke(out procdata); }              //if (this.OnPCSX2ProcessCallback != null) { this.OnPCSX2ProcessCallback.Invoke(out procdata); }
53              this.UpdateEnabled = false;              this.UpdateEnabled = false;
54              txtData.BytesPerLine = (int)max_address_width;              txtData.BytesPerLine = (int)max_address_width;
55              txtData.UseFixedBytesPerLine = true;              txtData.UseFixedBytesPerLine = true;
56              txtData.StringViewVisible = true;              //txtData.StringViewVisible = true;
57              ramScroll.Minimum = (int)MemoryRangeStart;              ramScroll.Minimum = (int)MemoryRangeStart;
58              for (int i = MemoryRangeStart; i < (MemoryRangeStart + max_ram_view); i += max_address_width) { ramScroll.Maximum += (int)max_address_width; }              for (int i = MemoryRangeStart; i < (MemoryRangeStart + max_ram_view); i += max_address_width) { ramScroll.Maximum += (int)max_address_width; }
59              ramScroll.Value = ramScroll.Minimum;              ramScroll.Value = ramScroll.Minimum;
# Line 70  namespace RomCheater.Docking.UI Line 84  namespace RomCheater.Docking.UI
84                  GotoAddress(addr);                  GotoAddress(addr);
85              }              }
86  #else  #else
87              this.GotoImageBase();                  this.GotoImageBase();
88  #endif  #endif
89          }          }
90          #region IBrowseMemoryRegion          #region IBrowseMemoryRegion
# Line 82  namespace RomCheater.Docking.UI Line 96  namespace RomCheater.Docking.UI
96                  GotoAddress(MemoryRegion);                  GotoAddress(MemoryRegion);
97                  return true;                  return true;
98              }              }
99              catch(Exception ex)              catch (Exception ex)
100              {              {
101                  logger.Error.WriteLine("UIMemoryViewer.BrowseMemoryRegion(int MemoryRegion): Failed to Browse Memory Region: 0x{0:x8}", MemoryRegion);                  logger.Error.WriteLine("UIMemoryViewer.BrowseMemoryRegion(int MemoryRegion): Failed to Browse Memory Region: 0x{0:x8}", MemoryRegion);
102                  logger.Error.WriteLine(ex.ToString());                  logger.Error.WriteLine(ex.ToString());
# Line 120  namespace RomCheater.Docking.UI Line 134  namespace RomCheater.Docking.UI
134          #endregion          #endregion
135          public void GotoTop() { this.CURRENT_TOP_ADDR = 0; }          public void GotoTop() { this.CURRENT_TOP_ADDR = 0; }
136          public void GotoBottom() { uint size = (uint)MemoryRangeSize; this.CURRENT_TOP_ADDR = (int)((size - 1) - max_ram_view); }          public void GotoBottom() { uint size = (uint)MemoryRangeSize; this.CURRENT_TOP_ADDR = (int)((size - 1) - max_ram_view); }
137          public void GotoAddress(int addr) {          public void GotoAddress(int addr)
138            {
139              logger.VerboseDebug.WriteLine("UIMemoryViewer::GotoAddress(0x{0:x8})", addr);              logger.VerboseDebug.WriteLine("UIMemoryViewer::GotoAddress(0x{0:x8})", addr);
140              this.CURRENT_TOP_ADDR = (int)(addr & 0xFFFFFFF0); }              this.CURRENT_TOP_ADDR = (int)(addr & 0xFFFFFFF0);
141            }
142          private bool _UpdateEnabled;          private bool _UpdateEnabled;
143          public bool UpdateEnabled          public bool UpdateEnabled
144          {          {
# Line 151  namespace RomCheater.Docking.UI Line 167  namespace RomCheater.Docking.UI
167          private byte[] RamData = new byte[] { };          private byte[] RamData = new byte[] { };
168    
169          const int max_address_width = 16;          const int max_address_width = 16;
170          static int max_ram_view = max_address_width * 27;          static int max_ram_view = max_address_width * 20;
171    
172          static int small_scroll_change = max_address_width * 1; // scrolls one line (when you clikc the up or down arrows)          static int small_scroll_change = max_address_width * 1; // scrolls one line (when you clikc the up or down arrows)
173          static int medium_scroll_change = max_ram_view / 2; // scrolls half a page          static int medium_scroll_change = max_ram_view / 2; // scrolls half a page
# Line 170  namespace RomCheater.Docking.UI Line 186  namespace RomCheater.Docking.UI
186              Size size = g.MeasureString("00", txtData.Font).ToSize();              Size size = g.MeasureString("00", txtData.Font).ToSize();
187              int ByteHeight = size.Height;              int ByteHeight = size.Height;
188              int TotalHeight = txtData.Height;              int TotalHeight = txtData.Height;
189              int NumberOfBytes = (int)((TotalHeight / ByteHeight) * max_address_width);              int NumberOfBytes = (int)((TotalHeight / ByteHeight) * max_address_width) - max_address_width;
190              int byte_width = (max_address_width * 2);              int byte_width = (max_address_width * 2);
191              max_ram_view = NumberOfBytes + (byte_width);              max_ram_view = NumberOfBytes + (byte_width);
192          }          }
# Line 195  namespace RomCheater.Docking.UI Line 211  namespace RomCheater.Docking.UI
211    
212                  if (editor.AsBytes.Length == data.Length)                  if (editor.AsBytes.Length == data.Length)
213                  {                  {
214                        
215                      for (int i = 0; i < data.Length; i++)                      for (int i = 0; i < data.Length; i++)
216                      {                      {
217                          if (data[i] != editor.AsBytes[i])                          if (data[i] != editor.AsBytes[i])
218                              changed_byte_count++;                              changed_byte_count++;
219                      }                                          }
220                  }                  }
221                  //DynamicByteProvider _DynamicByteProvider = new DynamicByteProvider(editor.AsBytes);                  //DynamicByteProvider _DynamicByteProvider = new DynamicByteProvider(editor.AsBytes);
222                  //txtData.ByteProvider = _DynamicByteProvider;                  //txtData.ByteProvider = _DynamicByteProvider;
# Line 224  namespace RomCheater.Docking.UI Line 240  namespace RomCheater.Docking.UI
240          {          {
241              if (AcceptedProcess == null) { return; }              if (AcceptedProcess == null) { return; }
242              if (AcceptedPlugin == null) { return; }              if (AcceptedPlugin == null) { return; }
243                
244              if (!this.ShouldUpdateResults()) { return; }// this.Logger.LogDebugMessage(string.Format("ShouldUpdateResults() -> returning false")); return; }              if (!this.ShouldUpdateResults()) { return; }// this.Logger.LogDebugMessage(string.Format("ShouldUpdateResults() -> returning false")); return; }
245              this.UpdateMaxRamView();              this.UpdateMaxRamView();
246              //if (!force)              //if (!force)
# Line 289  namespace RomCheater.Docking.UI Line 305  namespace RomCheater.Docking.UI
305                  if (AcceptedPlugin == null) { return; }                  if (AcceptedPlugin == null) { return; }
306    
307                  byte[] data = GetMemory();                  byte[] data = GetMemory();
308                    RamData = data;
309                    #region old ascii-code
310                  try                  try
311                  {                  {
                     RamData = data;  
   
   
312                      AddressList = "";                      AddressList = "";
313                      AsciiData = "";                      AsciiData = "";
314                      // write the addreses out                      // write the addreses out
# Line 303  namespace RomCheater.Docking.UI Line 318  namespace RomCheater.Docking.UI
318                      }                      }
319                      //// write out the ascii data                      //// write out the ascii data
320                      StringBuilder builder = new StringBuilder();                      StringBuilder builder = new StringBuilder();
321                      for (int i = address; i < (address + max_ram_view); i += max_address_width)                      int count = 0;
322                        for (int i = 0; i < (0 + max_ram_view); i += max_address_width)
323                      {                      {
324                          try                          try
325                          {                          {
326                                //bool NoAccessRegion = false;
327                                //// preprocess line
328                                //for (int j = 0; j < max_address_width; j++)
329                                //{
330                                //    byte t = data[j];
331                                //    NoAccessRegion = (t == 0);
332                                //}
333                              for (int j = 0; j < max_address_width; j++)                              for (int j = 0; j < max_address_width; j++)
334                              {                              {
335                                    int current_real_address = address + j +i;
336                                  int current_addr = i + j;                                  int current_addr = i + j;
337                                  if (current_addr >= MemoryRangeSize) break;                                  if (current_addr >= MemoryRangeSize) break;
338                                  byte ascii_value_raw = data[j];  
339                                  char ascii_value = (char)data[j];                                                              byte ascii_value_raw = data[current_addr];
340                                    char ascii_value;
341                                    //if (ascii_value_raw == (byte)'?')
342                                    //{
343                                    //    ascii_value_raw = 0;
344                                    //    ascii_value = '?';
345                                    //    RamData[count] = 0;
346                                    //}
347                                    //else
348                                    //{
349                                    //    ascii_value = (char)data[j];
350                                    //}
351    
352                                    if (ascii_value_raw >= 0x20 && ascii_value_raw <= 0x7e)
353                                    {
354                                        ascii_value = (char)data[current_addr];
355                                    }
356                                    else
357                                    {
358                                        ascii_value = '.';
359                                    }
360    
361                                    GenericMemoryProvider gmp = new GenericMemoryProvider((IAcceptsProcessAndConfig)this);
362                                    gmp.OpenProvider();
363                                    byte t;
364                                    if (!gmp.ReadMemory(current_real_address, out t)) { ascii_value = '?'; }
365                                    gmp.CloseProvider();
366    
367    
368                                  builder.Append(ascii_value.ToString());                                  builder.Append(ascii_value.ToString());
369                              }                              }
370                              builder.AppendLine();                              builder.AppendLine();
# Line 322  namespace RomCheater.Docking.UI Line 374  namespace RomCheater.Docking.UI
374                              logger.Error.WriteLine("{0}.UpdateMemroyView().BuildingAsciiString:{1}{2}", this.GetType().Name, System.Environment.NewLine, ex.ToString());                              logger.Error.WriteLine("{0}.UpdateMemroyView().BuildingAsciiString:{1}{2}", this.GetType().Name, System.Environment.NewLine, ex.ToString());
375                              return;                              return;
376                          }                          }
377                            count++;
378                      }                      }
379                      AsciiData = builder.ToString();                      AsciiData = builder.ToString();
   
   
380                  }                  }
381                  catch (Exception ex)                  catch (Exception ex)
382                  {                  {
383                      logger.Error.WriteLine("{0}.UpdateMemroyView():{1}{2}", this.GetType().Name, System.Environment.NewLine, ex.ToString());                      logger.Error.WriteLine("{0}.UpdateMemroyView():{1}{2}", this.GetType().Name, System.Environment.NewLine, ex.ToString());
384                      return;                      return;
385                  }                  }
386                    #endregion
387              }              }
388              catch (Exception ex) { logger.Error.WriteLine("{0}.UpdateMemroyView():{1}{2}", this.GetType().Name, System.Environment.NewLine, ex.ToString()); }              catch (Exception ex) { logger.Error.WriteLine("{0}.UpdateMemroyView():{1}{2}", this.GetType().Name, System.Environment.NewLine, ex.ToString()); }
389          }          }
# Line 356  namespace RomCheater.Docking.UI Line 408  namespace RomCheater.Docking.UI
408                  //{                  //{
409                  //    int addr = (int)(start_address + i);                  //    int addr = (int)(start_address + i);
410                  //    byte data_to_write = data[i];                  //    byte data_to_write = data[i];
411                        
412                  //}                  //}
413                  provider.CloseProvider();                  provider.CloseProvider();
414              }              }
# Line 370  namespace RomCheater.Docking.UI Line 422  namespace RomCheater.Docking.UI
422              try              try
423              {              {
424                  txtAddresses.Clear(); txtAddresses.Text = AddressList;                  txtAddresses.Clear(); txtAddresses.Text = AddressList;
425                  //txtAscii.Clear(); txtAscii.Text = AsciiData;                  txtAscii.Clear(); txtAscii.Text = AsciiData;
426                  //this.Logger.LogDebugMessage(string.Format("RunWorkerCompeleted() -> Memory Size: {0}0x{2:X8}{1}", "{", "}", RamData.Length));                  //this.Logger.LogDebugMessage(string.Format("RunWorkerCompeleted() -> Memory Size: {0}0x{2:X8}{1}", "{", "}", RamData.Length));
427                  DynamicByteProvider _DynamicByteProvider = new DynamicByteProvider(RamData);                  DynamicByteProvider _DynamicByteProvider = new DynamicByteProvider(RamData);
428                  txtData.ByteProvider = _DynamicByteProvider;                  txtData.ByteProvider = _DynamicByteProvider;
# Line 449  namespace RomCheater.Docking.UI Line 501  namespace RomCheater.Docking.UI
501              if (this.CURRENT_TOP_ADDR < MemoryRangeStart) this.CURRENT_TOP_ADDR = MemoryRangeStart;              if (this.CURRENT_TOP_ADDR < MemoryRangeStart) this.CURRENT_TOP_ADDR = MemoryRangeStart;
502              //if (this.CURRENT_TOP_ADDR >= VTLB_VADDR_SIZE) this.CURRENT_TOP_ADDR = (size - 1) - max_ram_view;              //if (this.CURRENT_TOP_ADDR >= VTLB_VADDR_SIZE) this.CURRENT_TOP_ADDR = (size - 1) - max_ram_view;
503              if (this.CURRENT_TOP_ADDR + max_ram_view >= MemoryRangeSize) this.CURRENT_TOP_ADDR = (int)(MemoryRangeSize - max_ram_view);              if (this.CURRENT_TOP_ADDR + max_ram_view >= MemoryRangeSize) this.CURRENT_TOP_ADDR = (int)(MemoryRangeSize - max_ram_view);
504                
505              //this.UpdateEnabled = reenable;              //this.UpdateEnabled = reenable;
506          }          }
507    
# Line 461  namespace RomCheater.Docking.UI Line 513  namespace RomCheater.Docking.UI
513    
514          private ScrollEventArgs GetMouseWheelScrollChange(int WheelDelta)          private ScrollEventArgs GetMouseWheelScrollChange(int WheelDelta)
515          {          {
516              ScrollEventArgs args = new ScrollEventArgs(ScrollEventType.SmallIncrement,1);              ScrollEventArgs args = new ScrollEventArgs(ScrollEventType.SmallIncrement, 1);
517              if (WheelDelta < 0)              if (WheelDelta < 0)
518              {              {
519                  //// negative: scroll down                  //// negative: scroll down
# Line 495  namespace RomCheater.Docking.UI Line 547  namespace RomCheater.Docking.UI
547    
548          void txtAddresses_MouseWheel(object sender, MouseEventArgs e) { this.Handle_Scroll(sender, GetMouseWheelScrollChange(e.Delta)); }          void txtAddresses_MouseWheel(object sender, MouseEventArgs e) { this.Handle_Scroll(sender, GetMouseWheelScrollChange(e.Delta)); }
549          void txtData_MouseWheel(object sender, MouseEventArgs e) { this.Handle_Scroll(sender, GetMouseWheelScrollChange(e.Delta)); }          void txtData_MouseWheel(object sender, MouseEventArgs e) { this.Handle_Scroll(sender, GetMouseWheelScrollChange(e.Delta)); }
550          
551    
552          private void Handle_Scroll(object sender, ScrollEventArgs e)          private void Handle_Scroll(object sender, ScrollEventArgs e)
553          {          {
# Line 553  namespace RomCheater.Docking.UI Line 605  namespace RomCheater.Docking.UI
605              //isScrolling = false;              //isScrolling = false;
606          }          }
607          private void GotoImageBase()          private void GotoImageBase()
608          {                      {
609              if (this.peData == null) return;              if (this.peData == null) return;
610              object ImageBase = 0;              object ImageBase = 0;
611              bool x86 = this.peData.Is32bitAssembly();                          bool x86 = this.peData.Is32bitAssembly();
612              if (x86)              if (x86)
613              {              {
614                  ImageBase = this.peData.NTHeader.OptionalHeader32._ImageBase;                  ImageBase = this.peData.NTHeader.OptionalHeader32._ImageBase;
# Line 571  namespace RomCheater.Docking.UI Line 623  namespace RomCheater.Docking.UI
623                  logger.VerboseDebug.WriteLine("UIMemoryViewer::GotoImageBase(0x{0:x16})", ib);                  logger.VerboseDebug.WriteLine("UIMemoryViewer::GotoImageBase(0x{0:x16})", ib);
624                  txthexGoto.Value = (long)ib;                  txthexGoto.Value = (long)ib;
625              }              }
626                
627              this.GotoAddress(txthexGoto.ToInt32());              this.GotoAddress(txthexGoto.ToInt32());
628          }          }
629          private void btnGotoImageBase_Click(object sender, EventArgs e)          private void btnGotoImageBase_Click(object sender, EventArgs e)
630          {          {
631                
632              this.GotoImageBase();              this.GotoImageBase();
633          }          }
634    

Legend:
Removed from v.369  
changed lines
  Added in v.370

  ViewVC Help
Powered by ViewVC 1.1.22