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

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

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

revision 294 by william, Tue Jun 5 10:48:07 2012 UTC revision 299 by william, Tue Jun 5 11:36:17 2012 UTC
# Line 1  Line 1 
1  using System;  #define ENABLE_LOGGING
2    using System;
3  using System.Collections.Generic;  using System.Collections.Generic;
4  using System.Linq;  using System.Linq;
5  using System.Text;  using System.Text;
# Line 175  namespace Sojaner.MemoryScanner Line 176  namespace Sojaner.MemoryScanner
176    
177          #endregion          #endregion
178    
179            #region logging implementation
180            private static class log
181            {
182                public static class verbose
183                {
184                    public static class debug
185                    {
186                        public static void writeline(string format, params object[] args)
187                        {
188    #if ENABLE_LOGGING
189                            logger.VerboseDebug.WriteLine(format, args);
190    #endif
191                        }
192                        public static void write(string format, params object[] args)
193                        {
194    #if ENABLE_LOGGING
195                            logger.VerboseDebug.Write(format, args);
196    #endif
197                        }
198                    }
199                    public static class error
200                    {
201                        public static void writeline(string format, params object[] args)
202                        {
203    #if ENABLE_LOGGING
204                            logger.VerboseError.WriteLine(format, args);
205    #endif
206                        }
207                        public static void write(string format, params object[] args)
208                        {
209    #if ENABLE_LOGGING
210                            logger.VerboseError.Write(format, args);
211    #endif
212                        }
213                    }
214                }
215            }
216            #endregion
217    
218    
219          public PEReader(FileInfo fi) : this(fi.FullName) { }          public PEReader(FileInfo fi) : this(fi.FullName) { }
220          public PEReader(string filename)          public PEReader(string filename)
221          {          {            
222              Exception ErrorInfo = null;              Exception ErrorInfo = null;
223              using (FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read))              using (FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read))
224              {              {
225                  try                  try
226                  {                  {
227                      logger.VerboseDebug.WriteLine("Reading PE Format from: {0}", filename);                      log.verbose.debug.writeline("Reading PE Format from: {0}", filename);
228                      BinaryReader reader = new BinaryReader(fs);                      BinaryReader reader = new BinaryReader(fs);
229                      // Reset reader position, just in case                      // Reset reader position, just in case
230                      reader.BaseStream.Seek(0, SeekOrigin.Begin);                      reader.BaseStream.Seek(0, SeekOrigin.Begin);
# Line 212  namespace Sojaner.MemoryScanner Line 253  namespace Sojaner.MemoryScanner
253                      // Read optional headers                      // Read optional headers
254                      if (Is32bitAssembly())                      if (Is32bitAssembly())
255                      {                      {
256                          logger.VerboseDebug.WriteLine("Detected a 32Bit PE Executable");                          log.verbose.debug.writeline("\tDetected a 32Bit PE Executable");
257                          Load32bitOptionalHeaders(reader);                          Load32bitOptionalHeaders(reader);
258                      }                      }
259                      else                      else
260                      {                      {
261                          logger.VerboseDebug.WriteLine("Detected a 64Bit PE Executable");                          log.verbose.debug.writeline("\tDetected a 64Bit PE Executable");
262                          Load64bitOptionalHeaders(reader);                          Load64bitOptionalHeaders(reader);
263                      }                      }
264    
265                      // Read section data                      // Read section data
266                      logger.VerboseDebug.WriteLine("Total Section Headers: {0}", _sectionHeaders.Count);                      log.verbose.debug.writeline("\tTotal Section Headers: {0}", _sectionHeaders.Count);
267                      foreach (IMAGE_SECTION_HEADER header in _sectionHeaders)                      foreach (IMAGE_SECTION_HEADER header in _sectionHeaders)
268                      {                      {
269                          int section_index = _sectionHeaders.IndexOf(header) + 1;                          int section_index = _sectionHeaders.IndexOf(header) + 1;
270                          logger.VerboseDebug.WriteLine("Section Header: {0} of {1}", section_index, _sectionHeaders.Count);                          log.verbose.debug.writeline("\tSection Header: {0} of {1}", section_index, _sectionHeaders.Count);
271                          logger.VerboseDebug.WriteLine("\tName: {0}", header.Name);                          log.verbose.debug.writeline("\t\tName: {0}", header.Name);
272                          logger.VerboseDebug.WriteLine("\tVirtual Address: 0x{0:x8}", header.VirtualAddress);                          log.verbose.debug.writeline("\t\tVirtual Address: 0x{0:x8}", header.VirtualAddress);
273                          logger.VerboseDebug.WriteLine("\tPhysical Address: 0x{0:x8}", header.Misc.PhysicalAddress);                          log.verbose.debug.writeline("\t\tPhysical Address: 0x{0:x8}", header.Misc.PhysicalAddress);
274                          logger.VerboseDebug.WriteLine("\tVirtual Size: 0x{0:x8}", header.Misc.VirtualSize);                          log.verbose.debug.writeline("\t\tVirtual Size: 0x{0:x8}", header.Misc.VirtualSize);
275                          logger.VerboseDebug.WriteLine("\tRaw Data Size: 0x{0:x8}", header.SizeOfRawData);                          log.verbose.debug.writeline("\t\tRaw Data Size: 0x{0:x8}", header.SizeOfRawData);
276                          logger.VerboseDebug.WriteLine("\tPointer To Raw Data: 0x{0:x8}", header.PointerToRawData);                          log.verbose.debug.writeline("\t\tPointer To Raw Data: 0x{0:x8}", header.PointerToRawData);
277    
278                          // Skip to beginning of a section                          // Skip to beginning of a section
279                          reader.BaseStream.Seek(header.PointerToRawData, SeekOrigin.Begin);                          reader.BaseStream.Seek(header.PointerToRawData, SeekOrigin.Begin);
# Line 250  namespace Sojaner.MemoryScanner Line 291  namespace Sojaner.MemoryScanner
291              }              }
292              if (ErrorInfo != null)              if (ErrorInfo != null)
293              {              {
294                  logger.VerboseError.WriteLine("Error Reading PE Format from: {0}",filename);                  log.verbose.error.writeline("Error Reading PE Format from: {0}", filename);
295                  logger.VerboseError.WriteLine(ErrorInfo.ToString());                  log.verbose.error.writeline(ErrorInfo.ToString());
296              }              }
297          }          }
298    

Legend:
Removed from v.294  
changed lines
  Added in v.299

  ViewVC Help
Powered by ViewVC 1.1.22