/[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 202 by william, Thu May 31 08:38:16 2012 UTC revision 243 by william, Sun Jun 3 13:21:51 2012 UTC
# Line 10  using Be.Windows.Forms; Line 10  using Be.Windows.Forms;
10  using RomCheater.Logging;  using RomCheater.Logging;
11  using RomCheater.PluginFramework.Interfaces;  using RomCheater.PluginFramework.Interfaces;
12  using System.Diagnostics;  using System.Diagnostics;
13    using Sojaner.MemoryScanner.MemoryProviers;
14    
15  namespace RomCheater.Docking.UI  namespace RomCheater.Docking.UI
16  {  {
17      public partial class UIMemoryViewer : UserControl, IProcessConfig, IAcceptsPlugin<IConfigPlugin>//, IAcceptsMemoryRange      public partial class UIMemoryViewer : UserControl,
18            IAcceptsPlugin<IConfigPlugin>,
19            IAcceptsProcess<Process>,
20            IAcceptsProcessAndConfig
21      {      {
22          public UIMemoryViewer()          public UIMemoryViewer()
23          {          {
# Line 43  namespace RomCheater.Docking.UI Line 47  namespace RomCheater.Docking.UI
47    
48              txtAddresses.MouseWheel += new MouseEventHandler(txtAddresses_MouseWheel);              txtAddresses.MouseWheel += new MouseEventHandler(txtAddresses_MouseWheel);
49              txtData.MouseWheel += new MouseEventHandler(txtData_MouseWheel);              txtData.MouseWheel += new MouseEventHandler(txtData_MouseWheel);
50          }          }
51          #region IProcessConfig Members  
52            private void GetFirstNonZeroByte()
53            {
54                if (!DesignMode)
55                {
56                    GenericMemoryProvider provider = new GenericMemoryProvider((IAcceptsProcessAndConfig)this);
57                    uint addr = 0;
58                    provider.ReadFirstNonZeroByte(MemoryStart, MemorySize, out addr);
59                    GotoAddress(addr);
60                }
61            }
62    
63            #region  IAcceptsProcess<Process> Members
64          private Process _AcceptedProcess;          private Process _AcceptedProcess;
65          public Process AcceptedProcess          public Process AcceptedProcess
66          {          {
# Line 54  namespace RomCheater.Docking.UI Line 70  namespace RomCheater.Docking.UI
70                  _AcceptedProcess = value;                  _AcceptedProcess = value;
71                  update_timer.Enabled = (value != null);                  update_timer.Enabled = (value != null);
72                  UpdateEnabled = update_timer.Enabled;                  UpdateEnabled = update_timer.Enabled;
73                    if (value != null)
74                        GetFirstNonZeroByte();
75              }              }
76          }          }
77          #endregion          #endregion
# Line 61  namespace RomCheater.Docking.UI Line 79  namespace RomCheater.Docking.UI
79          public IConfigPlugin AcceptedPlugin { get; set; }          public IConfigPlugin AcceptedPlugin { get; set; }
80          #endregion          #endregion
81          #region IAcceptsMemoryRange members          #region IAcceptsMemoryRange members
82          private uint MemoryStart { get { return 0; } }          public uint MemoryStart { get { return 0; } }
83          private uint MemorySize { get { return int.MaxValue; } }          public uint MemorySize { get { return int.MaxValue; } }
84          #endregion          #endregion
85          public void GotoTop() { this.CURRENT_TOP_ADDR = 0; }          public void GotoTop() { this.CURRENT_TOP_ADDR = 0; }
86          public void GotoBottom() { uint size = MemorySize; this.CURRENT_TOP_ADDR = (uint)((size - 1) - max_ram_view); }          public void GotoBottom() { uint size = MemorySize; this.CURRENT_TOP_ADDR = (uint)((size - 1) - max_ram_view); }
# Line 104  namespace RomCheater.Docking.UI Line 122  namespace RomCheater.Docking.UI
122          uint CURRENT_TOP_ADDR          uint CURRENT_TOP_ADDR
123          {          {
124              get { return _CURRENT_TOP_ADDR; }              get { return _CURRENT_TOP_ADDR; }
125              set { _CURRENT_TOP_ADDR = value; }              set { txthexGoto.Value = _CURRENT_TOP_ADDR = value; }
126          }          }
127          //uint CURRENT_BOITTOM_ADDR() { return CURRENT_TOP_ADDR + max_ram_view; }          //uint CURRENT_BOITTOM_ADDR() { return CURRENT_TOP_ADDR + max_ram_view; }
128          private void UpdateMaxRamView()          private void UpdateMaxRamView()
# Line 131  namespace RomCheater.Docking.UI Line 149  namespace RomCheater.Docking.UI
149              editor.ShowDialog();              editor.ShowDialog();
150              if (editor.BytesEdited)              if (editor.BytesEdited)
151              {              {
152                  DynamicByteProvider _DynamicByteProvider = new DynamicByteProvider(editor.AsBytes);                  //DynamicByteProvider _DynamicByteProvider = new DynamicByteProvider(editor.AsBytes);
153                  txtData.ByteProvider = _DynamicByteProvider;                  //txtData.ByteProvider = _DynamicByteProvider;
154                  _DynamicByteProvider.Changed += new EventHandler(HexResourceViewerBytes_Changed);                  //_DynamicByteProvider.Changed += new EventHandler(HexResourceViewerBytes_Changed);
155                  this.WriteCurrentBytes();                  this.WriteCurrentBytes(this.CURRENT_TOP_ADDR, editor.AsBytes);
156              }              }
157              this.UpdateEnabled = reenable;              this.UpdateEnabled = reenable;
158          }          }
# Line 174  namespace RomCheater.Docking.UI Line 192  namespace RomCheater.Docking.UI
192          {          {
193              try              try
194              {              {
195                  Sojaner.MemoryScanner.ProcessMemoryReader reader = new Sojaner.MemoryScanner.ProcessMemoryReader();                  GenericMemoryProvider provider = new GenericMemoryProvider((IAcceptsProcessAndConfig)this);
                 reader.ReadProcess = this.AcceptedProcess;  
                 reader.OpenProcess();  
196                  int bytesReadSize;                  int bytesReadSize;
197                  byte[] data = reader.ReadProcessMemory(CURRENT_TOP_ADDR, max_ram_view, out bytesReadSize);                  byte[] data;
198                    provider.ReadProcessMemory(CURRENT_TOP_ADDR, max_ram_view, out bytesReadSize, out data);
199                  //this.Logger.LogDebugMessage(string.Format("GetMemory() -> Memory Size: {0}0x{2:X8}{1}", "{", "}", data.Length));                  //this.Logger.LogDebugMessage(string.Format("GetMemory() -> Memory Size: {0}0x{2:X8}{1}", "{", "}", data.Length));
200                  return data;                  return data;
201              }              }
# Line 252  namespace RomCheater.Docking.UI Line 269  namespace RomCheater.Docking.UI
269              }              }
270              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()); }
271          }          }
272          private void HexResourceViewerBytes_Changed(object sender, System.EventArgs e)          //private void HexResourceViewerBytes_Changed(object sender, System.EventArgs e)
273          {          //{
274              this.WriteCurrentBytes();          //    this.WriteCurrentBytes();
275          }          //}
276          private void WriteCurrentBytes()          private void WriteCurrentBytes(uint start_address, byte[] data)
277          {          {
278              try              try
279              {              {
280                  if (AcceptedProcess == null) { return; }                  if (AcceptedProcess == null) { return; }
281                  if (AcceptedPlugin == null) { return; }                  if (AcceptedPlugin == null) { return; }
282                  // Byte changed                  // Byte changed
283                  byte[] data = (txtData.ByteProvider as DynamicByteProvider).Bytes.ToArray();                  //byte[] data = (txtData.ByteProvider as DynamicByteProvider).Bytes.ToArray();
284                                    GenericMemoryProvider provider = new GenericMemoryProvider((IAcceptsProcessAndConfig)this);
   
                 Sojaner.MemoryScanner.ProcessMemoryReader reader = new Sojaner.MemoryScanner.ProcessMemoryReader();  
                 reader.ReadProcess = this.AcceptedProcess;  
                 reader.OpenProcess();  
285                  int bytesReadSize;                  int bytesReadSize;
286    
287                  for (int i = 0; i < data.Length; i += sizeof(uint))                  for (int i = 0; i < data.Length; i ++)
288                  {                  {
289                      uint addr = (uint)(this.CURRENT_TOP_ADDR + i);                      uint addr = (uint)(start_address + i);
290                      uint data_to_write = BitConverter.ToUInt32(data, i);                      byte data_to_write = data[i];
291                      reader.WriteProcessMemory((UIntPtr)addr, data, out bytesReadSize);                      provider.WriteProcessMemory(addr, data_to_write, out bytesReadSize);
292                  }                  }
293              }              }
294              catch (Exception ex) { logger.Error.WriteLine("{0}.WriteCurrentBytes():{1}{2}", this.GetType().Name, System.Environment.NewLine, ex.ToString()); }              catch (Exception ex) { logger.Error.WriteLine("{0}.WriteCurrentBytes():{1}{2}", this.GetType().Name, System.Environment.NewLine, ex.ToString()); }
# Line 292  namespace RomCheater.Docking.UI Line 305  namespace RomCheater.Docking.UI
305                  //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));
306                  DynamicByteProvider _DynamicByteProvider = new DynamicByteProvider(RamData);                  DynamicByteProvider _DynamicByteProvider = new DynamicByteProvider(RamData);
307                  txtData.ByteProvider = _DynamicByteProvider;                  txtData.ByteProvider = _DynamicByteProvider;
308                  _DynamicByteProvider.Changed += new EventHandler(HexResourceViewerBytes_Changed);                  //_DynamicByteProvider.Changed += new EventHandler(HexResourceViewerBytes_Changed);
309              }              }
310              catch (ObjectDisposedException) { } // ignore errors aobut disposed objects (usually only happens when the parent closes)              catch (ObjectDisposedException) { } // ignore errors aobut disposed objects (usually only happens when the parent closes)
311              catch (Exception ex) { logger.Error.WriteLine("{0}.ResultsUpdateWorkerThread_RunWorkerCompleted():{1}{2}", this.GetType().Name, System.Environment.NewLine, ex.ToString()); }              catch (Exception ex) { logger.Error.WriteLine("{0}.ResultsUpdateWorkerThread_RunWorkerCompleted():{1}{2}", this.GetType().Name, System.Environment.NewLine, ex.ToString()); }
# Line 308  namespace RomCheater.Docking.UI Line 321  namespace RomCheater.Docking.UI
321              uint ORIGINAL_ADDR = this.CURRENT_TOP_ADDR;              uint ORIGINAL_ADDR = this.CURRENT_TOP_ADDR;
322    
323              ////if (e.Type == ScrollEventType.EndScroll) return;              ////if (e.Type == ScrollEventType.EndScroll) return;
324              uint size = max_ram_view;              //uint size = max_ram_view;
325    
326              bool haveModifier = false;              bool haveModifier = false;
327              switch (e.Modifiers)              switch (e.Modifiers)
# Line 320  namespace RomCheater.Docking.UI Line 333  namespace RomCheater.Docking.UI
333                              this.CURRENT_TOP_ADDR = 0; //NonHandledKeysAreBeingPressed = false;                              this.CURRENT_TOP_ADDR = 0; //NonHandledKeysAreBeingPressed = false;
334                              break;                              break;
335                          case Keys.End:                          case Keys.End:
336                              this.CURRENT_TOP_ADDR = (uint)((size - 1) - max_ram_view); //NonHandledKeysAreBeingPressed = false;                              this.CURRENT_TOP_ADDR = (uint)((MemorySize - 1) - max_ram_view); //NonHandledKeysAreBeingPressed = false;
337                              break;                              break;
338                          default:                          default:
339                              //NonHandledKeysAreBeingPressed = true;                              //NonHandledKeysAreBeingPressed = true;
# Line 334  namespace RomCheater.Docking.UI Line 347  namespace RomCheater.Docking.UI
347                  switch (e.KeyCode)                  switch (e.KeyCode)
348                  {                  {
349                      case Keys.Up:                      case Keys.Up:
350                          this.CURRENT_TOP_ADDR -= (uint)small_scroll_change; //NonHandledKeysAreBeingPressed = false;                          if (this.CURRENT_TOP_ADDR == 0 && (this.CURRENT_TOP_ADDR - small_scroll_change > this.CURRENT_TOP_ADDR))
351                            {
352                                this.CURRENT_TOP_ADDR = ORIGINAL_ADDR;
353                            }
354                            else
355                            {
356                                this.CURRENT_TOP_ADDR -= (uint)small_scroll_change; //NonHandledKeysAreBeingPressed = false;
357                            }
358                          break;                          break;
359                      case Keys.Down:                      case Keys.Down:
360                          this.CURRENT_TOP_ADDR += (uint)small_scroll_change; //NonHandledKeysAreBeingPressed = false;                          this.CURRENT_TOP_ADDR += (uint)small_scroll_change; //NonHandledKeysAreBeingPressed = false;
361                          break;                          break;
362                      case Keys.PageUp:                      case Keys.PageUp:
363                          this.CURRENT_TOP_ADDR -= (uint)(large_scroll_change); //NonHandledKeysAreBeingPressed = false;                          if (this.CURRENT_TOP_ADDR == 0 && (this.CURRENT_TOP_ADDR - large_scroll_change > this.CURRENT_TOP_ADDR))
364                            {
365                                this.CURRENT_TOP_ADDR = ORIGINAL_ADDR;
366                            }
367                            else
368                            {
369                                this.CURRENT_TOP_ADDR -= (uint)(large_scroll_change); //NonHandledKeysAreBeingPressed = false;
370                            }
371                          break;                          break;
372                      case Keys.PageDown:                      case Keys.PageDown:
373                          this.CURRENT_TOP_ADDR += (uint)(large_scroll_change); //NonHandledKeysAreBeingPressed = false;                          this.CURRENT_TOP_ADDR += (uint)(large_scroll_change); //NonHandledKeysAreBeingPressed = false;
# Line 352  namespace RomCheater.Docking.UI Line 379  namespace RomCheater.Docking.UI
379              }              }
380              if (this.CURRENT_TOP_ADDR < MemoryStart) this.CURRENT_TOP_ADDR = MemoryStart;              if (this.CURRENT_TOP_ADDR < MemoryStart) this.CURRENT_TOP_ADDR = MemoryStart;
381              //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;
382              if (this.CURRENT_TOP_ADDR + max_ram_view >= MemorySize) this.CURRENT_TOP_ADDR = (size - 1);              if (this.CURRENT_TOP_ADDR + max_ram_view >= MemorySize) this.CURRENT_TOP_ADDR = (MemorySize - max_ram_view);
383                
384              //this.UpdateEnabled = reenable;              //this.UpdateEnabled = reenable;
385          }          }
386    
# Line 410  namespace RomCheater.Docking.UI Line 437  namespace RomCheater.Docking.UI
437    
438              this.UpdateMaxRamView();              this.UpdateMaxRamView();
439              uint ORIGINAL_ADDR = this.CURRENT_TOP_ADDR;              uint ORIGINAL_ADDR = this.CURRENT_TOP_ADDR;
440              uint size = MemorySize;              //uint size = MemorySize;
441              if (e.Type == ScrollEventType.EndScroll) return;              if (e.Type == ScrollEventType.EndScroll) return;
442    
443              switch (e.Type)              switch (e.Type)
# Line 452  namespace RomCheater.Docking.UI Line 479  namespace RomCheater.Docking.UI
479              if (this.CURRENT_TOP_ADDR < 0) this.CURRENT_TOP_ADDR = 0;              if (this.CURRENT_TOP_ADDR < 0) this.CURRENT_TOP_ADDR = 0;
480              //if (this.CURRENT_TOP_ADDR >= VTLB_VADDR_SIZE) this.CURRENT_TOP_ADDR = VTLB_VADDR_SIZE - max_ram_view;              //if (this.CURRENT_TOP_ADDR >= VTLB_VADDR_SIZE) this.CURRENT_TOP_ADDR = VTLB_VADDR_SIZE - max_ram_view;
481              //if (this.CURRENT_TOP_ADDR < 0 || this.CURRENT_TOP_ADDR >= VTLB_VADDR_SIZE) this.CURRENT_TOP_ADDR = ORIGINAL_ADDR;              //if (this.CURRENT_TOP_ADDR < 0 || this.CURRENT_TOP_ADDR >= VTLB_VADDR_SIZE) this.CURRENT_TOP_ADDR = ORIGINAL_ADDR;
482              if (this.CURRENT_TOP_ADDR + max_ram_view >= MemorySize) this.CURRENT_TOP_ADDR = (size - 1) - max_ram_view;              if (this.CURRENT_TOP_ADDR + max_ram_view >= MemorySize) this.CURRENT_TOP_ADDR = MemorySize - max_ram_view;
483              //this.UpdateEnabled = reenable;              //this.UpdateEnabled = reenable;
484              //isScrolling = false;              //isScrolling = false;
485          }          }
486    
487      }      }
488  }  }

Legend:
Removed from v.202  
changed lines
  Added in v.243

  ViewVC Help
Powered by ViewVC 1.1.22