Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }