ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/RomCheater/trunk/Win32/Sojaner.MemoryScanner/PEReader.cs
(Generate patch)

Comparing trunk/Win32/Sojaner.MemoryScanner/PEReader.cs (file contents):
Revision 161 by william, Mon May 28 05:55:59 2012 UTC vs.
Revision 290 by william, Tue Jun 5 09:30:32 2012 UTC

# Line 12 | Line 12 | namespace Sojaner.MemoryScanner
12      public class PEReader
13      {
14          public PEReader(FileInfo fi) : this(fi.FullName) { }
15 <        public PEReader(string filename) { this.Read(filename); }
15 >        public PEReader(string filename)
16 >        {
17 >            Exception ErrorInfo = null;
18 >            try
19 >            {
20 >                this.Read(filename, out ErrorInfo);
21 >            }
22 >            catch (Exception ex)
23 >            {
24 >                logger.Error.WriteLine("PEReader: Failed to read process: {0}", filename);
25 >                if (ErrorInfo != null)
26 >                {
27 >                    //logger.Error.WriteLine(ErrorInfo.GetBaseException().ToString());
28 >                    throw ErrorInfo;
29 >                }
30 >                else
31 >                {
32 >                    //logger.Error.WriteLine(ex.GetBaseException().ToString());
33 >                    throw ex;
34 >                }          
35 >            }
36 >        }
37  
38          #region marshalling
39 <        private void Read(string filename)
39 >        private void Read(string filename, out Exception ErrorInfo)
40          {
41 <            logger.Debug.WriteLine("Reading Exe: {0}", filename);
42 <
22 <            using (FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read))
41 >            ErrorInfo = null;
42 >            try
43              {
44 <                byte[] data = new byte[] { };
25 <                GCHandle pinnedPacket = new GCHandle();
26 <                int size = 0;
27 <                BinaryReader br = new BinaryReader(fs);
44 >                logger.Debug.WriteLine("Reading Exe: {0}", filename);
45  
46 <                #region IMAGE_DOS_HEADER
47 <                size = Marshal.SizeOf(typeof(IMAGE_DOS_HEADER));
48 <                data = br.ReadBytes(size);
49 <                pinnedPacket = GCHandle.Alloc(data, GCHandleType.Pinned);
50 <                IMAGE_DOS_HEADER DOS_HEADER = (IMAGE_DOS_HEADER)Marshal.PtrToStructure(pinnedPacket.AddrOfPinnedObject(), typeof(IMAGE_DOS_HEADER));
51 <                pinnedPacket.Free();
52 <                #endregion
53 <
54 <                // skip the old dos stub
55 <                br.BaseStream.Seek(DOS_HEADER.e_lfanew, SeekOrigin.Begin);
56 <
57 <                #region IMAGE_NT_HEADERS
58 <                size = Marshal.SizeOf(typeof(IMAGE_NT_HEADERS));
59 <                data = br.ReadBytes(size);
60 <                pinnedPacket = GCHandle.Alloc(data, GCHandleType.Pinned);
61 <                IMAGE_NT_HEADERS NT_HEADER = (IMAGE_NT_HEADERS)Marshal.PtrToStructure(pinnedPacket.AddrOfPinnedObject(), typeof(IMAGE_NT_HEADERS));
62 <                pinnedPacket.Free();
63 <                #endregion
64 <
65 <
66 <                br.Close();
46 >                using (FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read))
47 >                {
48 >                    try
49 >                    {
50 >                        byte[] data = new byte[] { };
51 >                        GCHandle pinnedPacket = new GCHandle();
52 >                        int size = 0;
53 >                        BinaryReader br = new BinaryReader(fs);
54 >
55 >                        #region IMAGE_DOS_HEADER
56 >                        size = Marshal.SizeOf(typeof(IMAGE_DOS_HEADER));
57 >                        data = br.ReadBytes(size);
58 >                        pinnedPacket = GCHandle.Alloc(data, GCHandleType.Pinned);
59 >                        IMAGE_DOS_HEADER DOS_HEADER = (IMAGE_DOS_HEADER)Marshal.PtrToStructure(pinnedPacket.AddrOfPinnedObject(), typeof(IMAGE_DOS_HEADER));
60 >                        pinnedPacket.Free();
61 >                        #endregion
62 >
63 >                        // skip the old dos stub
64 >                        br.BaseStream.Seek(DOS_HEADER.e_lfanew, SeekOrigin.Begin);
65 >
66 >                        #region IMAGE_NT_HEADERS
67 >                        size = Marshal.SizeOf(typeof(IMAGE_NT_HEADERS));
68 >                        data = br.ReadBytes(size);
69 >                        pinnedPacket = GCHandle.Alloc(data, GCHandleType.Pinned);
70 >                        IMAGE_NT_HEADERS NT_HEADER = (IMAGE_NT_HEADERS)Marshal.PtrToStructure(pinnedPacket.AddrOfPinnedObject(), typeof(IMAGE_NT_HEADERS));
71 >                        pinnedPacket.Free();
72 >                        #endregion
73 >
74 >
75 >                        br.Close();
76 >                    }
77 >                    catch (Exception ex)
78 >                    {
79 >                        ErrorInfo = ex;
80 >                    }
81 >                }
82 >            }
83 >            catch (Exception ex)
84 >            {
85 >                ErrorInfo = ex;
86              }
51
52
87          }
88          #endregion
89  
# Line 121 | Line 155 | namespace Sojaner.MemoryScanner
155              [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
156              public char[] Signature;
157  
158 <            [FieldOffset(4)]
158 >            [FieldOffset(8)]
159              public IMAGE_FILE_HEADER FileHeader;
160  
161              [FieldOffset(24)]

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines