/[RomCheater]/trunk/Win32/Sojaner.MemoryScanner/MemoryScanner.cs
ViewVC logotype

Diff of /trunk/Win32/Sojaner.MemoryScanner/MemoryScanner.cs

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

revision 162 by william, Mon May 28 07:12:37 2012 UTC revision 167 by william, Mon May 28 08:31:56 2012 UTC
# Line 72  namespace Sojaner.MemoryScanner Line 72  namespace Sojaner.MemoryScanner
72          public bool DumpMemory(string filename, uint MemoryAddress, uint bytesToRead, out int bytesRead)          public bool DumpMemory(string filename, uint MemoryAddress, uint bytesToRead, out int bytesRead)
73          {          {
74              bytesRead = 0;              bytesRead = 0;
75              uint byte_alignment = 512; // 4mb alignment              uint byte_alignment = 102400; // write to file in 100mb chunks
76              uint address = MemoryAddress;              uint address = MemoryAddress;
77                uint _bytesToRead = bytesToRead;
78                byte[] buffer = new byte[] { };
79              try              try
80              {              {
81                  using (FileStream fs = new FileStream(filename, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite))                  FileInfo fi = new FileInfo(filename);
82                    if (fi.Exists)
83                        fi.Delete();
84                    using (FileStream fs = new FileStream(filename, FileMode.CreateNew, FileAccess.ReadWrite, FileShare.ReadWrite))
85                  {                  {
86                      BinaryWriter bw = new BinaryWriter(fs);                      BinaryWriter bw = new BinaryWriter(fs);
87                      //foreach (byte b in data) { bw.Write(b); }                      //foreach (byte b in data) { bw.Write(b); }
88    
89                      for (uint i = 0; i <= bytesToRead; i += byte_alignment)                      for (uint i = 0; i <= bytesToRead;)
90                      {                      {
91                          byte[] buffer = new byte[byte_alignment];                          if (_bytesToRead < byte_alignment)
92                          uint bytes_to_read = byte_alignment;                          {
93                                _bytesToRead = bytesToRead;
94                                buffer = new byte[_bytesToRead];
95                            }
96                            else
97                            {
98                                _bytesToRead = byte_alignment;
99                                buffer = new byte[byte_alignment];
100                            }
101                          IntPtr ptrBytesRead;                          IntPtr ptrBytesRead;
102                          ProcessMemoryReaderApi.ReadProcessMemory(m_hProcess, (IntPtr)address, buffer, bytes_to_read, out ptrBytesRead);                          ProcessMemoryReaderApi.ReadProcessMemory(m_hProcess, (UIntPtr)address, buffer, _bytesToRead, out ptrBytesRead);
103                          bytesRead = ptrBytesRead.ToInt32();                          bytesRead = ptrBytesRead.ToInt32();
104                          bw.Write(buffer);                          bw.Write(buffer);
105                          bw.Flush();                          bw.Flush();
106                          address += byte_alignment;                          
107                            if (_bytesToRead < byte_alignment)
108                            {
109                                i += _bytesToRead;
110                                address += _bytesToRead;
111                            }
112                            else
113                            {
114                                i += byte_alignment;
115                                address += byte_alignment;
116                            }
117    
118                            
119                      }                      }
120                      bw.Close();                      bw.Close();
121                  }                  }
# Line 124  namespace Sojaner.MemoryScanner Line 149  namespace Sojaner.MemoryScanner
149                      byte[] buffer = new byte[byte_alignment];                      byte[] buffer = new byte[byte_alignment];
150                      uint bytes_to_read = byte_alignment;                      uint bytes_to_read = byte_alignment;
151                      IntPtr ptrBytesRead;                      IntPtr ptrBytesRead;
152                      ProcessMemoryReaderApi.ReadProcessMemory(m_hProcess, (IntPtr)address, buffer, bytes_to_read, out ptrBytesRead);                      ProcessMemoryReaderApi.ReadProcessMemory(m_hProcess, (UIntPtr)address, buffer, bytes_to_read, out ptrBytesRead);
153                      bytesRead = ptrBytesRead.ToInt32();                      bytesRead = ptrBytesRead.ToInt32();
154                      aligned_array_list.Add(buffer);                                          aligned_array_list.Add(buffer);                    
155                      address += byte_alignment;                      address += byte_alignment;
# Line 148  namespace Sojaner.MemoryScanner Line 173  namespace Sojaner.MemoryScanner
173              return new byte[] { };              return new byte[] { };
174          }          }
175    
176          public void WriteProcessMemory(IntPtr MemoryAddress, byte[] bytesToWrite, out int bytesWritten)          public void WriteProcessMemory(UIntPtr MemoryAddress, byte[] bytesToWrite, out int bytesWritten)
177          {          {
178              IntPtr ptrBytesWritten;              IntPtr ptrBytesWritten;
179              ProcessMemoryReaderApi.WriteProcessMemory(m_hProcess, MemoryAddress, bytesToWrite, (uint)bytesToWrite.Length, out ptrBytesWritten);              ProcessMemoryReaderApi.WriteProcessMemory(m_hProcess, MemoryAddress, bytesToWrite, (uint)bytesToWrite.Length, out ptrBytesWritten);
# Line 203  namespace Sojaner.MemoryScanner Line 228  namespace Sojaner.MemoryScanner
228              //                  SIZE_T * lpNumberOfBytesRead  // number of bytes read              //                  SIZE_T * lpNumberOfBytesRead  // number of bytes read
229              //                  );              //                  );
230              [DllImport("kernel32.dll")]              [DllImport("kernel32.dll")]
231              public static extern Int32 ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, [In, Out] byte[] buffer, UInt32 size, out IntPtr lpNumberOfBytesRead);              public static extern Int32 ReadProcessMemory(IntPtr hProcess, UIntPtr lpBaseAddress, [In, Out] byte[] buffer, UInt32 size, out IntPtr lpNumberOfBytesRead);
232    
233              //          BOOL WriteProcessMemory(              //          BOOL WriteProcessMemory(
234              //                  HANDLE hProcess,                // handle to process              //                  HANDLE hProcess,                // handle to process
# Line 213  namespace Sojaner.MemoryScanner Line 238  namespace Sojaner.MemoryScanner
238              //                  SIZE_T * lpNumberOfBytesWritten // count of bytes written              //                  SIZE_T * lpNumberOfBytesWritten // count of bytes written
239              //                  );              //                  );
240              [DllImport("kernel32.dll")]              [DllImport("kernel32.dll")]
241              public static extern Int32 WriteProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, [In, Out] byte[] buffer, UInt32 size, out IntPtr lpNumberOfBytesWritten);              public static extern Int32 WriteProcessMemory(IntPtr hProcess, UIntPtr lpBaseAddress, [In, Out] byte[] buffer, UInt32 size, out IntPtr lpNumberOfBytesWritten);
242    
243    
244          }          }

Legend:
Removed from v.162  
changed lines
  Added in v.167

  ViewVC Help
Powered by ViewVC 1.1.22