/[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 166 by william, Mon May 28 08:14:02 2012 UTC revision 169 by william, Mon May 28 08:49:42 2012 UTC
# Line 69  namespace Sojaner.MemoryScanner Line 69  namespace Sojaner.MemoryScanner
69          }          }
70    
71    
72          public bool DumpMemory(string filename, uint MemoryAddress, uint bytesToRead, out int bytesRead)          public bool DumpMemory(Process ppid, string filename, uint MemoryAddress, uint bytesToRead, out int bytesRead)
73          {          {
74                logger.Info.WriteLine("Dumping memory (0x{0:x8}-0x{1:x8}) from pid=({3}) to file {2}", MemoryAddress, MemoryAddress + bytesToRead, filename, string.Format("0x{0:x4} {1}.exe", ppid.Id, ppid.ProcessName));
75              bytesRead = 0;              bytesRead = 0;
76              uint byte_alignment = 102400; // write to file in 100mb chunks              uint byte_alignment = 102400; // write to file in 100mb chunks
77              uint address = MemoryAddress;              uint address = MemoryAddress;
78                uint _bytesToRead = bytesToRead;
79                byte[] buffer = new byte[] { };
80              try              try
81              {              {
82                  using (FileStream fs = new FileStream(filename, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite))                  FileInfo fi = new FileInfo(filename);
83                    if (fi.Exists)
84                        fi.Delete();
85                    using (FileStream fs = new FileStream(filename, FileMode.CreateNew, FileAccess.ReadWrite, FileShare.ReadWrite))
86                  {                  {
87                      BinaryWriter bw = new BinaryWriter(fs);                      BinaryWriter bw = new BinaryWriter(fs);
88                      //foreach (byte b in data) { bw.Write(b); }                      //foreach (byte b in data) { bw.Write(b); }
89    
90                      for (uint i = 0; i <= bytesToRead; i += byte_alignment)                      for (uint i = 0; i <= bytesToRead;)
91                      {                      {
92                          byte[] buffer = new byte[byte_alignment];                          if (_bytesToRead < byte_alignment)
93                          uint bytes_to_read = byte_alignment;                          {
94                                _bytesToRead = bytesToRead;
95                                buffer = new byte[_bytesToRead];
96                            }
97                            else
98                            {
99                                _bytesToRead = byte_alignment;
100                                buffer = new byte[byte_alignment];
101                            }
102                          IntPtr ptrBytesRead;                          IntPtr ptrBytesRead;
103                          ProcessMemoryReaderApi.ReadProcessMemory(m_hProcess, (UIntPtr)address, buffer, bytes_to_read, out ptrBytesRead);                          ProcessMemoryReaderApi.ReadProcessMemory(m_hProcess, (UIntPtr)address, buffer, _bytesToRead, out ptrBytesRead);
104                          bytesRead = ptrBytesRead.ToInt32();                          bytesRead = ptrBytesRead.ToInt32();
105                          bw.Write(buffer);                          bw.Write(buffer);
106                          bw.Flush();                          bw.Flush();
107                          address += byte_alignment;                          
108                            if (_bytesToRead < byte_alignment)
109                            {
110                                i += _bytesToRead;
111                                address += _bytesToRead;
112                            }
113                            else
114                            {
115                                i += byte_alignment;
116                                address += byte_alignment;
117                            }
118    
119                            
120                      }                      }
121                      bw.Close();                      bw.Close();
122                  }                  }
123                    logger.Info.WriteLine("Succefully dumped memory (0x{0:x8}-0x{1:x8}) from pid=({3}) to file {2}", MemoryAddress, MemoryAddress + bytesToRead, filename, string.Format("0x{0:x4} {1}.exe", ppid.Id, ppid.ProcessName));
124                  return true;                  return true;
125              }              }
126              catch (OutOfMemoryException ex)              catch (OutOfMemoryException ex)
127              {              {
128                    logger.Error.WriteLine("Failed to dump memory (0x{0:x8}-0x{1:x8}) from pid=({3}) to file {2}", MemoryAddress, MemoryAddress + bytesToRead, filename, string.Format("0x{0:x4} {1}.exe", ppid.Id, ppid.ProcessName));
129                  logger.Error.WriteLine("DumpMemory(): OutOfMemoryException");                  logger.Error.WriteLine("DumpMemory(): OutOfMemoryException");
130                  logger.Error.WriteLine(ex.ToString());                  logger.Error.WriteLine(ex.ToString());
131              }              }
132              catch (Exception ex)              catch (Exception ex)
133              {              {
134                    logger.Error.WriteLine("Failed to dump memory (0x{0:x8}-0x{1:x8}) from pid=({3}) to file {2}", MemoryAddress, MemoryAddress + bytesToRead, filename, string.Format("0x{0:x4} {1}.exe", ppid.Id, ppid.ProcessName));
135                  logger.Error.WriteLine("DumpMemory(): Exception");                  logger.Error.WriteLine("DumpMemory(): Exception");
136                  logger.Error.WriteLine(ex.ToString());                  logger.Error.WriteLine(ex.ToString());
137              }              }

Legend:
Removed from v.166  
changed lines
  Added in v.169

  ViewVC Help
Powered by ViewVC 1.1.22