/[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 214 by william, Sat Jun 2 10:43:05 2012 UTC revision 246 by william, Sun Jun 3 15:15:51 2012 UTC
# Line 1  Line 1 
1  ´╗┐using System;  ´╗┐#define DISABLE_GETFIRSTNONZEROBYTE_ONUPDATE_ACCEPTEDPROCESS // when defined will not call GetFirstNonZeroByte() when AcceptedProcess is updated and is not null
2    #define DISABLE_GETFIRSTNONZERO_BYTE // when defined will make GetFirstNonZeroByte() an empty void method
3    using System;
4  using System.Collections.Generic;  using System.Collections.Generic;
5  using System.ComponentModel;  using System.ComponentModel;
6  using System.Drawing;  using System.Drawing;
# Line 10  using Be.Windows.Forms; Line 12  using Be.Windows.Forms;
12  using RomCheater.Logging;  using RomCheater.Logging;
13  using RomCheater.PluginFramework.Interfaces;  using RomCheater.PluginFramework.Interfaces;
14  using System.Diagnostics;  using System.Diagnostics;
15    using Sojaner.MemoryScanner.MemoryProviers;
16    
17  namespace RomCheater.Docking.UI  namespace RomCheater.Docking.UI
18  {  {
19      public partial class UIMemoryViewer : UserControl, IProcessConfig, IAcceptsPlugin<IConfigPlugin>//, IAcceptsMemoryRange      public partial class UIMemoryViewer : UserControl,
20            IAcceptsPlugin<IConfigPlugin>,
21            IAcceptsProcess<Process>,
22            IAcceptsProcessAndConfig
23      {      {
24          public UIMemoryViewer()          public UIMemoryViewer()
25          {          {
# Line 47  namespace RomCheater.Docking.UI Line 53  namespace RomCheater.Docking.UI
53    
54          private void GetFirstNonZeroByte()          private void GetFirstNonZeroByte()
55          {          {
56    #if !DISABLE_GETFIRSTNONZERO_BYTE
57              if (!DesignMode)              if (!DesignMode)
58              {              {
59                  Sojaner.MemoryScanner.ProcessMemoryReader reader = new Sojaner.MemoryScanner.ProcessMemoryReader();                  GenericMemoryProvider provider = new GenericMemoryProvider((IAcceptsProcessAndConfig)this);
60                  reader.ReadProcess = this.AcceptedProcess;                  provider.OpenProvider();
                 reader.OpenProcess();  
61                  uint addr = 0;                  uint addr = 0;
62                  reader.ReadFirstNonZeroByte(MemoryStart, MemorySize, out addr);                  provider.ReadFirstNonZeroByte(MemoryStart, MemorySize, out addr);
63                    provider.CloseProvider();
64                  GotoAddress(addr);                  GotoAddress(addr);
65              }              }
66    #endif
67          }          }
68    
69          #region IProcessConfig Members          #region  IAcceptsProcess<Process> Members
70          private Process _AcceptedProcess;          private Process _AcceptedProcess;
71          public Process AcceptedProcess          public Process AcceptedProcess
72          {          {
# Line 68  namespace RomCheater.Docking.UI Line 76  namespace RomCheater.Docking.UI
76                  _AcceptedProcess = value;                  _AcceptedProcess = value;
77                  update_timer.Enabled = (value != null);                  update_timer.Enabled = (value != null);
78                  UpdateEnabled = update_timer.Enabled;                  UpdateEnabled = update_timer.Enabled;
79    #if !DISABLE_GETFIRSTNONZEROBYTE_ONUPDATE_ACCEPTEDPROCESS
80                  if (value != null)                  if (value != null)
81                      GetFirstNonZeroByte();                      GetFirstNonZeroByte();
82    #endif
83              }              }
84          }          }
85          #endregion          #endregion
# Line 120  namespace RomCheater.Docking.UI Line 130  namespace RomCheater.Docking.UI
130          uint CURRENT_TOP_ADDR          uint CURRENT_TOP_ADDR
131          {          {
132              get { return _CURRENT_TOP_ADDR; }              get { return _CURRENT_TOP_ADDR; }
133              set { _CURRENT_TOP_ADDR = value; }              set { txthexGoto.Value = _CURRENT_TOP_ADDR = value; }
134          }          }
135          //uint CURRENT_BOITTOM_ADDR() { return CURRENT_TOP_ADDR + max_ram_view; }          //uint CURRENT_BOITTOM_ADDR() { return CURRENT_TOP_ADDR + max_ram_view; }
136          private void UpdateMaxRamView()          private void UpdateMaxRamView()
# Line 188  namespace RomCheater.Docking.UI Line 198  namespace RomCheater.Docking.UI
198          }          }
199          private byte[] GetMemory()          private byte[] GetMemory()
200          {          {
201                byte[] data = new byte[] { };
202              try              try
203              {              {
204                  Sojaner.MemoryScanner.ProcessMemoryReader reader = new Sojaner.MemoryScanner.ProcessMemoryReader();                  GenericMemoryProvider provider = new GenericMemoryProvider((IAcceptsProcessAndConfig)this);
205                  reader.ReadProcess = this.AcceptedProcess;                  provider.OpenProvider();
                 reader.OpenProcess();  
206                  int bytesReadSize;                  int bytesReadSize;
207                  byte[] data = reader.ReadProcessMemory(CURRENT_TOP_ADDR, max_ram_view, out bytesReadSize);                  provider.ReadProcessMemory(CURRENT_TOP_ADDR, max_ram_view, out bytesReadSize, out data);
208                  //this.Logger.LogDebugMessage(string.Format("GetMemory() -> Memory Size: {0}0x{2:X8}{1}", "{", "}", data.Length));                  provider.CloseProvider();
209                  return data;  
210              }              }
211              catch (Exception ex)              catch (Exception ex)
212              {              {
213                  logger.Error.WriteLine("{0}.GetMemory():{1}{2}", this.GetType().Name, System.Environment.NewLine, ex.ToString());                  logger.Error.WriteLine("{0}.GetMemory():{1}{2}", this.GetType().Name, System.Environment.NewLine, ex.ToString());
                 byte[] data = new byte[max_ram_view];  
                 for (int i = 0; i < data.Length; i++) { data[i] = 0x0; }  
                 return data;  
214              }              }
215                finally
216                {
217                    if (data.Length == 0)
218                    {
219                        data = new byte[max_ram_view];
220                        for (int i = 0; i < data.Length; i++) { data[i] = 0x0; }
221                    }
222                }
223                return data;
224          }          }
225          private void UpdateMemroyView() { this.UpdateMemroyView(this.CURRENT_TOP_ADDR); }          private void UpdateMemroyView() { this.UpdateMemroyView(this.CURRENT_TOP_ADDR); }
226          private void UpdateMemroyView(uint address)          private void UpdateMemroyView(uint address)
# Line 280  namespace RomCheater.Docking.UI Line 296  namespace RomCheater.Docking.UI
296                  if (AcceptedPlugin == null) { return; }                  if (AcceptedPlugin == null) { return; }
297                  // Byte changed                  // Byte changed
298                  //byte[] data = (txtData.ByteProvider as DynamicByteProvider).Bytes.ToArray();                  //byte[] data = (txtData.ByteProvider as DynamicByteProvider).Bytes.ToArray();
299                                    GenericMemoryProvider provider = new GenericMemoryProvider((IAcceptsProcessAndConfig)this);
300                    provider.OpenProvider();
                 Sojaner.MemoryScanner.ProcessMemoryReader reader = new Sojaner.MemoryScanner.ProcessMemoryReader();  
                 reader.ReadProcess = this.AcceptedProcess;  
                 reader.OpenProcess();  
301                  int bytesReadSize;                  int bytesReadSize;
302    
303                  for (int i = 0; i < data.Length; i ++)                  for (int i = 0; i < data.Length; i ++)
304                  {                  {
305                      uint addr = (uint)(start_address + i);                      uint addr = (uint)(start_address + i);
306                      byte data_to_write = data[i];                      byte data_to_write = data[i];
307                      reader.WriteProcessMemory((UIntPtr)addr, data_to_write, out bytesReadSize);                      provider.WriteProcessMemory(addr, data_to_write, out bytesReadSize);
308                  }                  }
309                    provider.CloseProvider();
310              }              }
311              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()); }
312          }          }

Legend:
Removed from v.214  
changed lines
  Added in v.246

  ViewVC Help
Powered by ViewVC 1.1.22