public static PortableExecutableFileHeader Read(string peFilePath) { var peFileHeader = new PortableExecutableFileHeader() { IsValid = false, DosHeader = null, NtHeader = null, }; // Read DOS header. var dosHeader = ImageDosHeader.Read(peFilePath); if (!dosHeader.IsValid) { return(peFileHeader); } // Read NT header. var ntHeader = ImageNtHeaders.Read(peFilePath, dosHeader.e_lfanew); if (!ntHeader.IsValid) { return(peFileHeader); } peFileHeader.IsValid = true; peFileHeader.DosHeader = dosHeader; peFileHeader.NtHeader = ntHeader; return(peFileHeader); }
internal static ImageDosHeader Read(string filePath) { var dosHeader = new ImageDosHeader() { IsValid = false, }; using (var stream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read)) using (var reader = new BinaryReader(stream)) { var e_magic = reader.ReadUInt16(); if (e_magic != ImageDosMagic) { return(dosHeader); } dosHeader.e_magic = e_magic; dosHeader.e_cblp = reader.ReadUInt16(); dosHeader.e_cp = reader.ReadUInt16(); dosHeader.e_crlc = reader.ReadUInt16(); dosHeader.e_cparhdr = reader.ReadUInt16(); dosHeader.e_minalloc = reader.ReadUInt16(); dosHeader.e_maxalloc = reader.ReadUInt16(); dosHeader.e_ss = reader.ReadUInt16(); dosHeader.e_sp = reader.ReadUInt16(); dosHeader.e_csum = reader.ReadUInt16(); dosHeader.e_ip = reader.ReadUInt16(); dosHeader.e_cs = reader.ReadUInt16(); dosHeader.e_lfarlc = reader.ReadUInt16(); dosHeader.e_ovno = reader.ReadUInt16(); dosHeader.e_res = new ushort[4]; for (int i = 0; i < dosHeader.e_res.Length; i++) { dosHeader.e_res[i] = reader.ReadUInt16(); } dosHeader.e_oemid = reader.ReadUInt16(); dosHeader.e_oeminfo = reader.ReadUInt16(); dosHeader.e_res2 = new ushort[10]; for (int i = 0; i < dosHeader.e_res2.Length; i++) { dosHeader.e_res2[i] = reader.ReadUInt16(); } dosHeader.e_lfanew = reader.ReadInt32(); } dosHeader.IsValid = true; return(dosHeader); }