Esempio n. 1
0
        public static uint AlignUpByFile(this IPEImage peImage, uint value)
        {
            if (peImage is null)
            {
                throw new ArgumentNullException(nameof(peImage));
            }

            return(MdlibUtils.AlignUp(value, !peImage.Is64Bit ? peImage.NtHeader.OptionalHeader.RawValue32->FileAlignment : peImage.NtHeader.OptionalHeader.RawValue64->FileAlignment));
        }
Esempio n. 2
0
        public static FileHeader Create(NtHeader ntHeader)
        {
            if (ntHeader is null)
            {
                throw new ArgumentNullException(nameof(ntHeader));
            }

            byte *     p;
            FileHeader fileHeader;

            p = (byte *)ntHeader.RawData + 4;
            if (!MdlibUtils.IsValidPointer(p, IMAGE_FILE_HEADER.UnmanagedSize))
            {
                return(null);
            }
            fileHeader = new FileHeader {
                _rawData = p,
                _offset  = (uint)ntHeader.FileOffset + 4
            };
            return(fileHeader);
        }
Esempio n. 3
0
        public static SectionHeader Create(IPEImage peImage, uint index)
        {
            if (peImage is null)
            {
                throw new ArgumentNullException(nameof(peImage));
            }

            FileHeader    fileHeader;
            uint          offset;
            SectionHeader sectionHeader;

            fileHeader = peImage.NtHeader.FileHeader;
            offset     = (uint)fileHeader.FileOffset + IMAGE_FILE_HEADER.UnmanagedSize + fileHeader.RawValue->SizeOfOptionalHeader + (index * IMAGE_SECTION_HEADER.UnmanagedSize);
            if (!MdlibUtils.IsValidPointer((byte *)peImage.RawData + offset, IMAGE_SECTION_HEADER.UnmanagedSize))
            {
                return(null);
            }
            sectionHeader = new SectionHeader {
                _offset  = offset,
                _rawData = (byte *)peImage.RawData + offset
            };
            return(sectionHeader);
        }